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

Форум АНТИЧАТ (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 пакеты. И там нормально всё строится и работает.


Время: 04:28