Просмотр полной версии : #400 Bad request (WinSock)(Delphi)
procedure TForm1.Button1Click(Sender: TObject);
var
s:TSocket;
Ws:TWSAData;
addr:sockaddr_in;
se:string;
login:string;
begin
Memo1.Lines.Add('Подкл. WinSock');
if WSAStartup($101,Ws)=-1 then
begin
Memo1.Lines.Add('-Ошибка');
exit;
end
else
begin
Memo1.Lines.Add('-Ок');
end;
Memo1.Lines.Add('Создание сокета');
s:=socket(af_inet, sock_stream, 0);
if s=-1 then
begin
Memo1.Lines.Add('-Ошибка');
exit;
end
else
begin
Memo1.Lines.Add('-Ок');
end;
addr.sin_family:=af_inet;
addr.sin_port:=htons(80);
addr.sin_addr.S_addr:=inet_addr('89.188.101.138');
Memo1.Lines.Add('Установка связи с хостом');
if connect(s,addr,sizeof(addr))=-1 then
begin
Memo1.Lines.Add('-Ошибка');
closesocket(s);
exit;
end
else
begin
Memo1.Lines.Add('-Ок');
end;
login:='SAVEURL=&SERVER=1&account='+edit1.Text+'&pass='+edit2.text+'&submit=%C2%EE%E9%F2%E8';
se:='POST /cgi/l2isapi.dll/l2login HTTP/1.0'+#13#10+
'User-Agent: Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00'+#13#10+
'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'+#13#10+
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8'+#13#10+
'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1'+#13#10+
'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0'+#13#10+
'Cookie: spylog_test=1'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Host: lineage.ru'+#13#10+
'Connection: Keep-Alive'+#13#10+
'Content-Length: '+IntToStr(Length(login))+#13#10+
'Content-Type: application/x-www-form-urlencoded'+#13#10+#13#10+login;
send(s,se,Length(se),0);
recv(s,re,5000,0);
Memo2.Text:=re;
closesocket(s);
end;
Создал новую тему так как код объемный
Вообщем получается ошибка #400 (ответ сервера)
Вот что в мемо добавляется
HTTP/1.1 400 Bad Request
Content-Type: text/html
Date: Tue, 23 Jun 2009 15:49:12 GMT
Connection: close
Content-Length: 35
<h1>Bad Request (Invalid Verb)</h1>
Исправьте пожалуйста! Поскоку изучаю WinSock не давно просьба не ругать :)
Скорее всего ошибка всего в пост-запросе. Снифай то, что отправляет браузер и то, что отправляешь ты, сравнивай - так найдёшь ошибку.
Уже вижу -
'Content-Length: '+IntToStr(Length(login))+
Замени на :
'Content-Length: '+IntToStr(Length(login))+#13#10+
Потом :
'Connection: close'+#13#10+#13#10; -это сотри нах.
В общем запрос должен выглядеть примерно так :
'POST http://lineage.ru/cgi/l2isapi.dll/l2login HTTP/1.0'+#13#10+
'User-Agent: Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00'+#13#10+
'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'+#13#10+
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8'+#13#10+
'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1'+#13#10+
'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0'+#13#10+
'Cookie: spylog_test=1'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Connection: Keep-Alive'+#13#10+
'Content-Length: '+IntToStr(Length(login))+#13#10+
'Content-Type: application/x-www-form-urlencoded'#13#10#13#10+login;
[n]-c0der
23.06.2009, 21:58
Во - первых код безобразный
Во - вторых тег [code][\code], придумали не просто так
В третьих учи HTTP протокол
В четвертых, прислушайся к вышесказанному ведь ты просишь помощи у общетсва, будь добр хотя бы сделать все это читабельным.
-c0der']Во - первых код безобразный
Переделай мой код пожалуйста под нормальный чтобы я понял что значит "Безобразный" (или же укажи на ошибки чтобы был код норм)
[n]-c0der http протокол я то знаю просто смутило что у автора de-visible в мини-статье написано в конце
"'Connection: close'+#13#10+#13#10;"
я решил так написать (да и вообще делал не на свежую голову, теперь осознал что сделал не так (в основном))
intNet переделал -> не помогает
посылал сейчас пакет итог (из под другой программы) -> что он послался нормально
мда....
не удевительно POST запрос должен быть хотябы такого вида
$post="srch_where=".url($sql)."&folder=".url('inbox')."&srch_text=".url('lol')."&srch_type=".url('s')."&sort_type=".url('d');
$len=length($post);
$zap="POST /messages.php HTTP/1.1\n"
."User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\n"
."Referer: www.zerodivide.hut1.ru\n"
."Content-Type: application/x-www-form-urlencoded\n"
# ."Content-Type: multipart/form-data;\n"
."Content-Length: $len\n"
."Cookie: $cook\n"
."Host: $serv\n"
."Accept: text/*;q=0,9\n"
."Connection: close\n\n"
."$post";
надеюсь разберешся что к чему. а ваще читай RFC по протоколу
мда....
не удевительно POST запрос должен быть хотябы такого вида
$post="srch_where=".url($sql)."&folder=".url('inbox')."&srch_text=".url('lol')."&srch_type=".url('s')."&sort_type=".url('d');
$len=length($post);
$zap="POST /messages.php HTTP/1.1\n"
."User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\n"
."Referer: www.zerodivide.hut1.ru\n"
."Content-Type: application/x-www-form-urlencoded\n"
# ."Content-Type: multipart/form-data;\n"
."Content-Length: $len\n"
."Cookie: $cook\n"
."Host: $serv\n"
."Accept: text/*;q=0,9\n"
."Connection: close\n\n"
."$post";
надеюсь разберешся что к чему. а ваще читай RFC по протоколу
#2 и #4...
Gar|k кстати а почему у девизибла
'Connection: close' + #13#10#13#10;
В конце http пакета, почему? (мини статьи -> вторая страница)
У тя же эта строчка до переменной $post
Впрочем сейчас надо мой сначала вопрос решить!
я незнаю почему у него так, но ващет сначала идут заголовки только потом данные.
твоя проблема решается бонально просто - измени запрос.
я незнаю почему у него так, но ващет сначала идут заголовки только потом данные.
твоя проблема решается бонально просто - измени запрос.
Легко сказать...
Ну и какой запрос подставить чтобы работало? В моем случае токо интересует! (примеры не нужны! нужно решение моей проблемы)
Твой пост #5 аналог посту #2 и в нем я не увидел доп. информации
Gar|k, не вижу разницы кроме различия в языках.
2 TC:
Снифай HTTP Analyzer'om, переходи на вкладку "stream", преобразовывай код к паскалевскому виду и шли. De-Visible делал также, никаких доп. данных он не прописывал.
Я Писал уже :
Снифай то, что отправляет браузер и то, что отправляешь ты, сравнивай - так найдёшь ошибку.
Сначала вкл. сниффер, логинишься на сайт(к примеру) и смотришь отпр. данные.
Копи-пастишь отправляемые данные в программу и пытаешься их отослать, сравниваешь заголовки. При удачном логине ответ от сервера будет 302, при неудачном - 200.
А вообще реально самый главный баг всего этого - не указано поле Host:
Потому как врядли где можно найти сервак у которого работа идет без host а по IP
А также сначало идут все заголовки. затем 2 раза СR LF а потом данные передаваемые.
P.S. загляни на месяц назад и найдешь мою прожку с исходником.
Называется HTTP Sender и там можно строить HTTP пакеты. И там нормально всё строится и работает.
Gar|k, не вижу разницы кроме различия в языках.
2 TC:
Снифай HTTP Analyzer'om, переходи на вкладку "stream", преобразовывай код к паскалевскому виду и шли. De-Visible делал также, никаких доп. данных он не прописывал.
Я Писал уже :
Сначала вкл. сниффер, логинишься на сайт(к примеру) и смотришь отпр. данные.
Копи-пастишь отправляемые данные в программу и пытаешься их отослать, сравниваешь заголовки. При удачном логине ответ от сервера будет 302, при неудачном - 200.
Ок... Решил все таки послать голый пакет (то есть который браузер передает)
login:='SAVEURL=&SERVER=1&account=111111&pass=22222222&submit=%C2%EE%E9%F2%E8';
se:='POST /cgi/l2isapi.dll/l2login HTTP/1.1'+#13#10+
'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, */*'+#13#10+
'Referer: http://www.lineage.ru/cgi/l2isapi.dll/l2login'+#13#10+
'Accept-Language: ru'+#13#10+
'Content-Type: application/x-www-form-urlencoded'+#13#10+
'Accept-Encoding: gzip, deflate'+#13#10+
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Pivim Multibar; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Embedded Web Browser from: http://bsalsa.com/; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)'+#13#10+
'Host: www.lineage.ru'+#13#10+
'Content-Length: 69'+#13#10+
'Connection: Keep-Alive'+#13#10+
'Cache-Control: no-cache'+#13#10+
'Cookie: spylog_test=1'+#13#10+#13#10+login;
Все равно #400 bad request! :mad:
slesh ок спасибо поищу
грустный ап (
чисто перед отправкой решил переменную SE (а точнее все что в ней) запихнуть в memo3 потом то что в мемо3 выведиться (пакет отсылаемый сам должен вывести в мемо3) отправить HTTP sender'ом (от slesh'а)(http sender:отправка успешна/ответ получен)
Я отправил такой запрос:
POST /cgi/l2isapi.dll/l2login HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, */*
Referer: http://www.lineage.ru/cgi/l2isapi.dll/l2login
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Pivim Multibar; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Embedded Web Browser from: http://bsalsa.com/; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
Host: www.lineage.ru
Content-Length: 69
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: spylog_test=1
SAVEURL=&SERVER=1&account=111111&pass=22222222&submit=%C2%EE%E9%F2%E8
И при этом у меня было все нормально.
Я отправил такой запрос:
POST /cgi/l2isapi.dll/l2login HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, */*
Referer: http://www.lineage.ru/cgi/l2isapi.dll/l2login
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Pivim Multibar; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Embedded Web Browser from: http://bsalsa.com/; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
Host: www.lineage.ru
Content-Length: 69
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: spylog_test=1
SAVEURL=&SERVER=1&account=111111&pass=22222222&submit=%C2%EE%E9%F2%E8
И при этом у меня было все нормально.
Что на делфи. Да? :D :D :D
Chrome~, харе глумиться :)
Блин. Я раньше писал очень простой Request Sender на Delphi. Если ты что то криво написал, то это далеко не означает, что другие тоже так пишут.
Блин. Я раньше писал очень простой Request Sender на Delphi. Если ты что то криво написал, то это далеко не означает, что другие тоже так пишут.
Меня не волнует что ты писал. Прошу вас удалиться из топика так как нету от вас пользы
Я нашел твою ошибку. Дело в том, что ты не правильно отправляешь данные.
Вот, переделал функцию отправки:
procedure TForm1.Button1Click(Sender: TObject);
var
s:TSocket;
Ws:TWSAData;
addr:sockaddr_in;
se,re:ansistring;
login:string;
buf: array[1..5000] of Char;
begin
Memo1.Lines.Add('Подкл. WinSock');
if WSAStartup($101,Ws)=-1 then
begin
Memo1.Lines.Add('-Ошибка');
exit;
end
else
begin
Memo1.Lines.Add('-Ок');
end;
Memo1.Lines.Add('Создание сокета');
s:=socket(af_inet, sock_stream, 0);
if s=-1 then
begin
Memo1.Lines.Add('-Ошибка');
exit;
end
else
begin
Memo1.Lines.Add('-Ок');
end;
addr.sin_family:=af_inet;
addr.sin_port:=htons(80);
addr.sin_addr.S_addr:=inet_addr('89.188.101.138');
Memo1.Lines.Add('Установка связи с хостом');
if connect(s,addr,sizeof(addr))=-1 then
begin
Memo1.Lines.Add('-Ошибка');
closesocket(s);
exit;
end
else
begin
Memo1.Lines.Add('-Ок');
end;
login:='SAVEURL=&SERVER=1&account=111&pass=222&submit=%C2%EE%E9%F2%E8';
se:='POST /cgi/l2isapi.dll/l2login HTTP/1.0'+#13#10+
'User-Agent: Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00'+#13#10+
'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'+#13#10+
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8'+#13#10+
'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1'+#13#10+
'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0'+#13#10+
'Cookie: spylog_test=1'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Host: lineage.ru'+#13#10+
'Connection: Keep-Alive'+#13#10+
'Content-Length: '+IntToStr(Length(login))+#13#10+
'Content-Type: application/x-www-form-urlencoded'+#13#10+#13#10+login;
CopyMemory(@buf, PChar(se), Length(se));
send(s,buf,SizeOf(buf),0);
recv(s,buf,SizeOf(buf),0);
re:=buf;
Memo2.Text:=re;
closesocket(s);
end;
Дело в том, что нужно отправлять не строку типа string, а массив типа Char.
P.S. Если ничего не знаешь про человека, не спеши с выводами.
Я нашел твою ошибку. Дело в том, что ты не правильно отправляешь данные.
Вот, переделал функцию отправки:
procedure TForm1.Button1Click(Sender: TObject);
var
s:TSocket;
Ws:TWSAData;
addr:sockaddr_in;
se,re:ansistring;
login:string;
buf: array[1..5000] of Char;
begin
Memo1.Lines.Add('Подкл. WinSock');
if WSAStartup($101,Ws)=-1 then
begin
Memo1.Lines.Add('-Ошибка');
exit;
end
else
begin
Memo1.Lines.Add('-Ок');
end;
Memo1.Lines.Add('Создание сокета');
s:=socket(af_inet, sock_stream, 0);
if s=-1 then
begin
Memo1.Lines.Add('-Ошибка');
exit;
end
else
begin
Memo1.Lines.Add('-Ок');
end;
addr.sin_family:=af_inet;
addr.sin_port:=htons(80);
addr.sin_addr.S_addr:=inet_addr('89.188.101.138');
Memo1.Lines.Add('Установка связи с хостом');
if connect(s,addr,sizeof(addr))=-1 then
begin
Memo1.Lines.Add('-Ошибка');
closesocket(s);
exit;
end
else
begin
Memo1.Lines.Add('-Ок');
end;
login:='SAVEURL=&SERVER=1&account=111&pass=222&submit=%C2%EE%E9%F2%E8';
se:='POST /cgi/l2isapi.dll/l2login HTTP/1.0'+#13#10+
'User-Agent: Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00'+#13#10+
'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'+#13#10+
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8'+#13#10+
'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1'+#13#10+
'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0'+#13#10+
'Cookie: spylog_test=1'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Host: lineage.ru'+#13#10+
'Connection: Keep-Alive'+#13#10+
'Content-Length: '+IntToStr(Length(login))+#13#10+
'Content-Type: application/x-www-form-urlencoded'+#13#10+#13#10+login;
CopyMemory(@buf, PChar(se), Length(se));
send(s,buf,SizeOf(buf),0);
recv(s,buf,SizeOf(buf),0);
re:=buf;
Memo2.Text:=re;
closesocket(s);
end;
Дело в том, что нужно отправлять не строку типа string, а массив типа Char.
P.S. Если ничего не знаешь про человека, не спеши с выводами.
ок. спасибо! (извеняй меня :) просто ты сеня написал утром типа такого "какой пост запрос посылаешь" это меня убило)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot