PDA

Просмотр полной версии : HTTP


Fliplab
28.03.2010, 03:49
Кто знает в чём может быть проблема?
Делаю запрос GET http://loveplanet.ru/index.php?a=regcheck&f=mail&v=' + Email + ' HTTP/1.0'#13#10#13#10. Он возвращает ошибку 400, типо запрос составлен не верно. Юзаю Винсоки. Отправляю этот запрос через shitt_http, ответ приходит нормальный. shitt_http - юзает Инди, сделалбы с ними, но терпеть их не могу.

Kaimi
28.03.2010, 04:02
Поюзай снифер, почитай rfc. Где Host в заросе?

Fliplab
28.03.2010, 04:12
Kaimi, такой запрос запросто жрётся так как версия HTTP 1.0. Запрос отправлял по всякому и с хостом и т.п. Никак. Кароче пох, инди так инди(((( бе

FEV
28.03.2010, 04:12
Поюзай снифер, почитай rfc. Где Host в заросе?
Для http 1.0 заголовок host не нужен.

Возможно, проблема в том, что строковая переменная Email не в UrlEncode.

Fliplab
28.03.2010, 04:15
FEV Неа, не помогло)))

FEV
28.03.2010, 04:19
почему "#13#10#13#10" находятся после последнего закрывающего апострофа? где первый открывающий апостроф? короче по тому куску кода ничего не понятно.

Fliplab
28.03.2010, 04:21
Данные уходят так

Client.Connect('loveplanet.ru', 80);
Header := 'GET http://loveplanet.ru/?a=regcheck&f=mail&v=' + Email + ' HTTP/1.0'#13#10#13#10;
Client.SendBuffer(Header, Length(Header));
Client.Idle(10);
Client.ReceiveBuffer(Rec, SizeOf(Rec));

Client - свой класс на винсоке

dmnt
28.03.2010, 04:43
Header := 'GET http://loveplanet.ru/?a=regcheck&f=mail&v=' + Email + ' HTTP/1.0'#13#10#13#10;
В дельфи не разбираюсь, но оно точно должно так выглядеть?
А не так:
Header := 'GET http://loveplanet.ru/?a=regcheck&f=mail&v=' + Email + ' HTTP/1.0'+'#13#10#13#10';

slesh
28.03.2010, 11:32
2 dmnt если не разбираешься, то лучше не пишу чушь!

Если ты шлеш запрос через HTTP прокси то всё норм. А если напрямую, то лучше сделай по нормальному. Потому что не все серваки корректно обрабатывают такие запрос.
делай типа
'GET /scrypt.ext?param='+mail+' HTTP/1.0'#13#10'Host: site.com'#13#10#13#10

Fliplab
28.03.2010, 13:22
slesh не помогло, я говорю всё уже перепробывал, не пойму в чём дело

Chrome~
28.03.2010, 14:36
Может быть проблема в твоем классе? Скинь часть кода, которая отвечает за отправку данных.

RedFern.89
28.03.2010, 14:42
#13 тут вовсе ни к чему. Перевод строки используй #10. т.е. каждую новую строку разделяй #10 и в конце запроса оставляй #10#10

Fliplab
28.03.2010, 14:42
Нет, в нём нет проблем. Не первая прога на нём, но первая кот не пашет

RedFern.89
28.03.2010, 14:56
вот тебе рабочий пример


const
RequestLine = 'GET /index.php HTTP/1.1' + #10 +
'Host: vk.com' + #10 +
'User-Agent: Mozilla/5.0 (delphi 7)' + #10 +
'Connection: close' + #10#10;
w : TClientSocket;
begin
w := TClientSocket.Create(nil);
w.Socket.SendText(RequestLine);
end;


у меня все работало)))

Chrome~
28.03.2010, 16:46
#13 тут вовсе ни к чему. Перевод строки используй #10. т.е. каждую новую строку разделяй #10 и в конце запроса оставляй #10#10
Неправильно, это тебе скажут все, кто более менее работал с протоколом HTTP. Нужно использовать именно #13#10.

slesh
28.03.2010, 18:04
2 Fliplab короче. не угукай мозги народу, а отснифайл то что посылается и выкладывай тут

Fliplab
28.03.2010, 18:29
Всё норм. Решил проблему) Delphi сума сошёл просто...

RedFern.89
30.03.2010, 11:00
Неправильно, это тебе скажут все, кто более менее работал с протоколом HTTP. Нужно использовать именно #13#10.

когда я юзал #13#10, то я вылетал с ошибкой 400 Bad Request. Может я что то не так делал. Но когда я использовал для перевода строки #10, то все работало норм)

Chrome~
30.03.2010, 14:24
когда я юзал #13#10, то я вылетал с ошибкой 400 Bad Request. Может я что то не так делал. Но когда я использовал для перевода строки #10, то все работало норм)
Ну не знаю, все может быть. Только лучше такие слова подтверждать фактами.

AlexTheC0d3r
30.03.2010, 14:27
когда я юзал #13#10, то я вылетал с ошибкой 400 Bad Request. Может я что то не так делал. Но когда я использовал для перевода строки #10, то все работало норм)

надо не #13#10 а #13+#10

Chrome~
30.03.2010, 14:40
надо не #13#10 а #13+#10
На будущее запомни. Следующие два варианты кода записывают один и тот же текст в поле Memo:
Memo.Text := 'test' + #13 + #10 + '123';
Memo.Text := 'test'#13#10'123';

AlexTheC0d3r
30.03.2010, 15:21
На будущее запомни. Следующие два варианты кода записывают один и тот же текст в поле Memo:
Memo.Text := 'test' + #13 + #10 + '123';
Memo.Text := 'test'#13#10'123';

понял, ошибся...
просто в первый раз написал #10#13

RedFern.89
04.04.2010, 02:05
Ошибка номер 400 - это и есть факт:)