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 передают
|
|
| |
xXxSh@dowxXx | Дата: Воскресенье, 04.01.2015, 22:42 | Сообщение # 6 |
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
| Может уже не втему но все же, на сколько я знаю сам скрипт на сервере должен уметь правильно обрабатывать пришедшие к нему Get запросы и работать дальше как то с этой инфой, а если на сервере ничего не настроено, то и смысл код проги ковырять тогда.
|
|
| |