Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   #400 Bad request (WinSock)(Delphi) (https://forum.antichat.xyz/showthread.php?t=126619)

diznt 23.06.2009 19:59

#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 (ответ сервера)

Вот что в мемо добавляется

PHP код:

HTTP/1.1 400 Bad Request
Content
-Typetext/html
Date
Tue23 Jun 2009 15:49:12 GMT
Connection
close
Content
-Length35

<h1>Bad Request (Invalid Verb)</h1

Исправьте пожалуйста! Поскоку изучаю WinSock не давно просьба не ругать :)

intNet 23.06.2009 21:57

Скорее всего ошибка всего в пост-запросе. Снифай то, что отправляет браузер и то, что отправляешь ты, сравнивай - так найдёшь ошибку.
Уже вижу -
Код:

'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 протокол
В четвертых, прислушайся к вышесказанному ведь ты просишь помощи у общетсва, будь добр хотя бы сделать все это читабельным.

diznt 24.06.2009 09:58

Цитата:

Сообщение от [n]-c0der
Во - первых код безобразный

Переделай мой код пожалуйста под нормальный чтобы я понял что значит "Безобразный" (или же укажи на ошибки чтобы был код норм)

[n]-c0der http протокол я то знаю просто смутило что у автора de-visible в мини-статье написано в конце
"'Connection: close'+#13#10+#13#10;"
я решил так написать (да и вообще делал не на свежую голову, теперь осознал что сделал не так (в основном))

intNet переделал -> не помогает
посылал сейчас пакет итог (из под другой программы) -> что он послался нормально

Gar|k 24.06.2009 13:42

мда....
не удевительно 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 по протоколу

diznt 24.06.2009 13:58

Цитата:

Сообщение от Gar|k
мда....
не удевительно 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

Впрочем сейчас надо мой сначала вопрос решить!

Gar|k 24.06.2009 15:16

я незнаю почему у него так, но ващет сначала идут заголовки только потом данные.
твоя проблема решается бонально просто - измени запрос.

diznt 24.06.2009 15:21

Цитата:

Сообщение от Gar|k
я незнаю почему у него так, но ващет сначала идут заголовки только потом данные.
твоя проблема решается бонально просто - измени запрос.

Легко сказать...
Ну и какой запрос подставить чтобы работало? В моем случае токо интересует! (примеры не нужны! нужно решение моей проблемы)
Твой пост #5 аналог посту #2 и в нем я не увидел доп. информации

intNet 24.06.2009 21:47

Gar|k, не вижу разницы кроме различия в языках.
2 TC:
Снифай HTTP Analyzer'om, переходи на вкладку "stream", преобразовывай код к паскалевскому виду и шли. De-Visible делал также, никаких доп. данных он не прописывал.
Я Писал уже :
Цитата:

Снифай то, что отправляет браузер и то, что отправляешь ты, сравнивай - так найдёшь ошибку.
Сначала вкл. сниффер, логинишься на сайт(к примеру) и смотришь отпр. данные.
Копи-пастишь отправляемые данные в программу и пытаешься их отослать, сравниваешь заголовки. При удачном логине ответ от сервера будет 302, при неудачном - 200.

slesh 25.06.2009 00:35

А вообще реально самый главный баг всего этого - не указано поле Host:
Потому как врядли где можно найти сервак у которого работа идет без host а по IP

А также сначало идут все заголовки. затем 2 раза СR LF а потом данные передаваемые.
P.S. загляни на месяц назад и найдешь мою прожку с исходником.
Называется HTTP Sender и там можно строить HTTP пакеты. И там нормально всё строится и работает.

diznt 25.06.2009 09:50

Цитата:

Сообщение от intNet
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 ок спасибо поищу

diznt 28.06.2009 17:40

грустный ап (
чисто перед отправкой решил переменную SE (а точнее все что в ней) запихнуть в memo3 потом то что в мемо3 выведиться (пакет отсылаемый сам должен вывести в мемо3) отправить HTTP sender'ом (от slesh'а)(http sender:отправка успешна/ответ получен)

diznt 13.07.2009 09:47

ап

Chrome~ 15.07.2009 11:07

Я отправил такой запрос:
Код:

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

И при этом у меня было все нормально.

diznt 15.07.2009 11:15

Цитата:

Сообщение от Chrome~
Я отправил такой запрос:
Код:

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~, харе глумиться :)

Chrome~ 15.07.2009 11:45

Блин. Я раньше писал очень простой Request Sender на Delphi. Если ты что то криво написал, то это далеко не означает, что другие тоже так пишут.

diznt 15.07.2009 11:51

Цитата:

Сообщение от Chrome~
Блин. Я раньше писал очень простой Request Sender на Delphi. Если ты что то криво написал, то это далеко не означает, что другие тоже так пишут.

Меня не волнует что ты писал. Прошу вас удалиться из топика так как нету от вас пользы

Chrome~ 15.07.2009 11:58

Я нашел твою ошибку. Дело в том, что ты не правильно отправляешь данные.
Вот, переделал функцию отправки:
Код:

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. Если ничего не знаешь про человека, не спеши с выводами.

diznt 15.07.2009 12:05

Цитата:

Сообщение от Chrome~
Я нашел твою ошибку. Дело в том, что ты не правильно отправляешь данные.
Вот, переделал функцию отправки:
Код:

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. Если ничего не знаешь про человека, не спеши с выводами.

ок. спасибо! (извеняй меня :) просто ты сеня написал утром типа такого "какой пост запрос посылаешь" это меня убило)


Время: 06:35