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-Type: text/html Date: Tue, 23 Jun 2009 15:49:12 GMT Connection: close Content-Length: 35 <h1>Bad Request (Invalid Verb)</h1> Исправьте пожалуйста! Поскоку изучаю WinSock не давно просьба не ругать
Скорее всего ошибка всего в пост-запросе. Снифай то, что отправляет браузер и то, что отправляешь ты, сравнивай - так найдёшь ошибку. Уже вижу - 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;
Во - первых код безобразный Во - вторых тег Code: [\code], придумали не просто так В третьих учи HTTP протокол В четвертых, прислушайся к вышесказанному ведь ты просишь помощи у общетсва, будь добр хотя бы сделать все это читабельным.
Переделай мой код пожалуйста под нормальный чтобы я понял что значит "Безобразный" (или же укажи на ошибки чтобы был код норм) [n]-c0der http протокол я то знаю просто смутило что у автора de-visible в мини-статье написано в конце "'Connection: close'+#13#10+#13#10;" я решил так написать (да и вообще делал не на свежую голову, теперь осознал что сделал не так (в основном)) intNet переделал -> не помогает посылал сейчас пакет итог (из под другой программы) -> что он послался нормально
мда.... не удевительно 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 по протоколу
#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 пакеты. И там нормально всё строится и работает.
Ок... Решил все таки послать голый пакет (то есть который браузер передает) 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! slesh ок спасибо поищу
грустный ап ( чисто перед отправкой решил переменную SE (а точнее все что в ней) запихнуть в memo3 потом то что в мемо3 выведиться (пакет отсылаемый сам должен вывести в мемо3) отправить HTTP sender'ом (от slesh'а)(http sender:отправка успешна/ответ получен)
Я отправил такой запрос: 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 И при этом у меня было все нормально.
Блин. Я раньше писал очень простой Request Sender на Delphi. Если ты что то криво написал, то это далеко не означает, что другие тоже так пишут.
Я нашел твою ошибку. Дело в том, что ты не правильно отправляешь данные. Вот, переделал функцию отправки: 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. Если ничего не знаешь про человека, не спеши с выводами.
ок. спасибо! (извеняй меня просто ты сеня написал утром типа такого "какой пост запрос посылаешь" это меня убило)