Четверг, 18.04.2024, 07:19 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024  
delphicode » Delphi » Вопросы по Delphi » WinSock - отправить "сложный" GET запрос
WinSock - отправить "сложный" GET запрос
toorookДата: Четверг, 01.01.2015, 14:28 | Сообщение # 1
Был не раз
Зарегистрирован: 04.09.2014
Группа: Пользователи
Сообщений: 11
Статус: Offline
Всех с НГ!!!
Вот появился вопрос. Как отправить GET запрос вида site.ru/index.php?id=457&vers=27
Есть такой код:

Код

procedure HTTPGet(URL,Query:String);   //HTTPGet('site.ru','/index.php?id=123');
var
   WSAData1: TWSAData;
   SockAddr1:TSockAddr;
   Socket1: TSocket;
   Buffer1:string;
   i,d:integer;

begin
//Если при вызове, функция выдала значение не равное "0", то выходим из функции.
   if WSAStartup(MAKEWORD(2,2), WSAData1)<>0 then
     Exit;
   Socket1:=Socket(AF_INET,SOCK_STREAM,0); // Создаём Socket
   if Socket1=INVALID_SOCKET then
     Exit; // Если при создании возникла ошибка, то выходим из функции.
   SockAddr1.sin_family:=AF_INET; // Указываем спецификацию типа "AF_INET" для TCP/IP
   SockAddr1.sin_addr:=pinaddr(gethostbyname(PChar(URL))^.h_addr^)^; // Тута мы вводим ссылку, получаем IP адрес сайта.
   SockAddr1.sin_port:=htons(80); //Ну порт с которым всегда работаем "80"
   if Connect(Socket1,SockAddr1,SizeOf(SockAddr1))<>0 then
     exit; //Если при подключении (не отправке), функция возвращает значение не равное "0", то выходим из функции.

   Buffer1:='GET '+query+' HTTP/1.1'#13#10+
            'Host: '+URL+#13#10+
            'Connection: close'#13#10+
            #13#10;
   // Выше мы составили Header

   send(Socket1,Buffer1[1],Length(Buffer1),0); //без возвращаемого значения
end;


Но он под простой get запрос.
Что нужно переделать, чтобы отправить веб-серверу 2 нужных мне значения в URL?


mr.toorook@jabber.ru
 
VolfДата: Пятница, 02.01.2015, 02:37 | Сообщение # 2
Частый гость
Зарегистрирован: 11.04.2013
Группа: Пользователи
Сообщений: 41
Статус: Offline
Почитай что такое GET запрос.
HTTPGet('site.ru','/index.php?id=457&vers=27');
Cкачай сниффер и смотри правильность ответа твоего Php гейта.
 
toorookДата: Пятница, 02.01.2015, 18:14 | Сообщение # 3
Был не раз
Зарегистрирован: 04.09.2014
Группа: Пользователи
Сообщений: 11
Статус: Offline
Цитата Volf ()
Почитай что такое GET запрос.
HTTPGet('site.ru','/index.php?id=457&vers=27');
Cкачай сниффер и смотри правильность ответа твоего Php гейта.

Я знаю что-такое Get запрос, на компонентах, делается в одну строку, но мне надо на сокетах или хотя бы на том, что не использует форму.
Цитата
HTTPGet('site.ru','/index.php?id=457&vers=27');

Не работает, ковыряю дальше. Мой гейт в порядке, его задача, просто взять значения запроса и записать их в БД. Мне и ответ то, собственно и не нужен, хотя....


mr.toorook@jabber.ru
 
VolfДата: Пятница, 02.01.2015, 22:02 | Сообщение # 4
Частый гость
Зарегистрирован: 11.04.2013
Группа: Пользователи
Сообщений: 41
Статус: Offline
С ЧЕГО ТЫ ВЗЯЛ ЧТО НЕ РАБОТАЕТ??
Я перед тем как отписать в этой теме все лично проверил на примере твоего кода!пиши мне в личку помогу.
P/S если пишешь бота то у тебя пока мало знаний.Трудись и через пол года напишешь классный софт.
 
C@TДата: Суббота, 03.01.2015, 16:11 | Сообщение # 5
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
toorook, попбобуй сделать recv после того как делаешь send , выдели себе
var
buf : array[0..2048] of char;

и сделай
recv(Socket1, buf, 2048, 0);

далее принтани buf ку да то(либо в консоль либо на memo) , либо поставь breakpoint и посмотри что у тебя в buf , ибо мне кажется что у тебя там может быть BAD REQUEST, обычно в HTTP еще и User-Agent передают smile


 
xXxSh@dowxXxДата: Воскресенье, 04.01.2015, 22:42 | Сообщение # 6
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Может уже не втему но все же, на сколько я знаю сам скрипт на сервере должен уметь правильно обрабатывать пришедшие к нему Get запросы и работать дальше как то с этой инфой, а если на сервере ничего не настроено, то и смысл код проги ковырять тогда.
 
delphicode » Delphi » Вопросы по Delphi » WinSock - отправить "сложный" GET запрос
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz