#400 Bad request (WinSock)(Delphi)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by diznt, 23 Jun 2009.

  1. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    556
    Likes Received:
    164
    Reputations:
    -19
    Code:
    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 не давно просьба не ругать :)
     
    #1 diznt, 23 Jun 2009
    Last edited: 15 Jul 2009
    1 person likes this.
  2. intNet

    intNet Member

    Joined:
    31 May 2009
    Messages:
    69
    Likes Received:
    14
    Reputations:
    5
    Скорее всего ошибка всего в пост-запросе. Снифай то, что отправляет браузер и то, что отправляешь ты, сравнивай - так найдёшь ошибку.
    Уже вижу -
    Code:
    'Content-Length: '+IntToStr(Length(login))+ 
    Замени на :
    Code:
    
    'Content-Length: '+IntToStr(Length(login))+#13#10+
    
    Потом :
    Code:
    'Connection: close'+#13#10+#13#10; 
    -это сотри нах.
    В общем запрос должен выглядеть примерно так :
    Code:
    '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;
    
     
  3. [n]-c0der

    [n]-c0der Member

    Joined:
    3 Feb 2009
    Messages:
    95
    Likes Received:
    25
    Reputations:
    -1
    Во - первых код безобразный
    Во - вторых тег
    Code:
    [\code], придумали не просто так
    В третьих учи HTTP протокол
    В четвертых, прислушайся к вышесказанному ведь ты просишь помощи у общетсва, будь добр хотя бы сделать все это читабельным.
     
  4. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    556
    Likes Received:
    164
    Reputations:
    -19
    Переделай мой код пожалуйста под нормальный чтобы я понял что значит "Безобразный" (или же укажи на ошибки чтобы был код норм)

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

    intNet переделал -> не помогает
    посылал сейчас пакет итог (из под другой программы) -> что он послался нормально
     
    #4 diznt, 24 Jun 2009
    Last edited: 24 Jun 2009
  5. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,174
    Likes Received:
    266
    Reputations:
    82
    мда....
    не удевительно POST запрос должен быть хотябы такого вида
    Code:
    $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 по протоколу
     
    _________________________
  6. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    556
    Likes Received:
    164
    Reputations:
    -19
    #2 и #4...

    Gar|k кстати а почему у девизибла

    'Connection: close' + #13#10#13#10;

    В конце http пакета, почему? (мини статьи -> вторая страница)

    У тя же эта строчка до переменной $post

    Впрочем сейчас надо мой сначала вопрос решить!
     
  7. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,174
    Likes Received:
    266
    Reputations:
    82
    я незнаю почему у него так, но ващет сначала идут заголовки только потом данные.
    твоя проблема решается бонально просто - измени запрос.
     
    _________________________
  8. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    556
    Likes Received:
    164
    Reputations:
    -19
    Легко сказать...
    Ну и какой запрос подставить чтобы работало? В моем случае токо интересует! (примеры не нужны! нужно решение моей проблемы)
    Твой пост #5 аналог посту #2 и в нем я не увидел доп. информации
     
    #8 diznt, 24 Jun 2009
    Last edited: 24 Jun 2009
  9. intNet

    intNet Member

    Joined:
    31 May 2009
    Messages:
    69
    Likes Received:
    14
    Reputations:
    5
    Gar|k, не вижу разницы кроме различия в языках.
    2 TC:
    Снифай HTTP Analyzer'om, переходи на вкладку "stream", преобразовывай код к паскалевскому виду и шли. De-Visible делал также, никаких доп. данных он не прописывал.
    Я Писал уже :
    Сначала вкл. сниффер, логинишься на сайт(к примеру) и смотришь отпр. данные.
    Копи-пастишь отправляемые данные в программу и пытаешься их отослать, сравниваешь заголовки. При удачном логине ответ от сервера будет 302, при неудачном - 200.
     
  10. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,204
    Reputations:
    455
    А вообще реально самый главный баг всего этого - не указано поле Host:
    Потому как врядли где можно найти сервак у которого работа идет без host а по IP

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

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    556
    Likes Received:
    164
    Reputations:
    -19
    Ок... Решил все таки послать голый пакет (то есть который браузер передает)

    Code:
     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 ок спасибо поищу
     
    2 people like this.
  12. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    556
    Likes Received:
    164
    Reputations:
    -19
    грустный ап (
    чисто перед отправкой решил переменную SE (а точнее все что в ней) запихнуть в memo3 потом то что в мемо3 выведиться (пакет отсылаемый сам должен вывести в мемо3) отправить HTTP sender'ом (от slesh'а)(http sender:отправка успешна/ответ получен)
     
  13. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    556
    Likes Received:
    164
    Reputations:
    -19
    ап
     
  14. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    1,012
    Likes Received:
    162
    Reputations:
    27
    Я отправил такой запрос:
    Code:
    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
    И при этом у меня было все нормально.
     
  15. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    556
    Likes Received:
    164
    Reputations:
    -19
    Что на делфи. Да? :D :D :D
    Chrome~, харе глумиться :)
     
    #15 diznt, 15 Jul 2009
    Last edited: 15 Jul 2009
  16. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    1,012
    Likes Received:
    162
    Reputations:
    27
    Блин. Я раньше писал очень простой Request Sender на Delphi. Если ты что то криво написал, то это далеко не означает, что другие тоже так пишут.
     
  17. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    556
    Likes Received:
    164
    Reputations:
    -19
    Меня не волнует что ты писал. Прошу вас удалиться из топика так как нету от вас пользы
     
  18. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    1,012
    Likes Received:
    162
    Reputations:
    27
    Я нашел твою ошибку. Дело в том, что ты не правильно отправляешь данные.
    Вот, переделал функцию отправки:
    Code:
    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. Если ничего не знаешь про человека, не спеши с выводами.
     
    2 people like this.
  19. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    556
    Likes Received:
    164
    Reputations:
    -19
    ок. спасибо! (извеняй меня :) просто ты сеня написал утром типа такого "какой пост запрос посылаешь" это меня убило)
     
Loading...