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?
[email protected]
|
|
|
|
|
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');
Не работает, ковыряю дальше. Мой гейт в порядке, его задача, просто взять значения запроса и записать их в БД. Мне и ответ то, собственно и не нужен, хотя....
[email protected]
|
|
|
|
|
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 запросы и работать дальше как то с этой инфой, а если на сервере ничего не настроено, то и смысл код проги ковырять тогда. |
|
|
|
|