Всем привет, пишу программу для логина на сайте. Но проблема в двух вещах : 1. я очень плохо знаю винсок (кучу примеров скачивал но их очень трудно разобрать) 2. Нужно отправить сразу два http post запроса на два разных url (192.168.1.48/login.php и 192.168.1.48/auth.php, такая там мудренная система логина через ajax) Пока получилось на локальном компьютере лишь это : 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('127.0.0.1'); 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:=memo3.text+#13#10+#13#10; 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; Как видно на скриншоте, сервер не понимает мой запрос. Запрос брал из firefox'а через аддон httpfox
Code: POST /bl.php HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://127.0.0.1/bl.php Cookie: collapseprefs=debug; rte-sidepanel=open; anonlogin=-1; member_id=1; hide_sidebar=1; gmpl_ogame=1+Pizoren90+60788e255743c74f1c32955de4be94b2+1; Content-Type: application/x-www-form-urlencoded Content-Length: 16 Это запрос который пытаюсь отправить
Fedcomp, запрос должен быть такой: Code: 'POST /bl.php HTTP/1.1'#13#10+ 'Host: 127.0.0.1'#13#10+ 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7'#13#10+ 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'#13#10+ 'Accept-Language: ru,en-us;q=0.7,en;q=0.3'#13#10+ 'Accept-Encoding: gzip,deflate'#13#10+ 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'#13#10+ 'Keep-Alive: 300'#13#10+ 'Connection: keep-alive'#13#10+ 'Referer: http://127.0.0.1/bl.php'#13#10+ 'Cookie: collapseprefs=debug; rte-sidepanel=open; anonlogin=-1; member_id=1; hide_sidebar=1; gmpl_ogame=1+Pizoren90+60788e255743c74f1c32955de4b e94b2+1;'#13#10+ 'Content-Type: application/x-www-form-urlencoded'#13#10+ 'Content-Length: 16'#13#10#13#10+ '[COLOR=DarkOrange]SAVEURL=&SERVER=1&account=111&pass=222&submit=%C2%EE%E9%F2%E8[/COLOR]'#13#10 ты не посылаешь часть, что выделена оранжевым, судя по твоему примеру. это и есть сам пост запрос. плюс проверь все переносы строк и их количество. 'Content-Length: 16' - у тебя он не 16 равен, на самом деле
Code: POST /bl.php HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://127.0.0.1/bl.htm Cookie: testcookie=1 Content-Type: application/x-www-form-urlencoded Content-Length: 0 Такой тоже не прокатывает. Получается интересный результат - Веб сервер выдает мне вот это Code: HTTP/1.1 200 OK Date: Sat, 13 Feb 2010 17:59:32 GMT Server: Apache/2.2.13 (Win32) PHP/5.2.10 X-Powered-By: PHP/5.2.10 Content-Length: 42 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html Array ( ) Array ( [testcookie] => 1 ) HTTP/1.1 400 Bad Request Date: Sat, 13 Feb 2010 17:59:32 GMT Server: Apache/2.2.13 (Win32) PHP/5.2.10 Content-Length: 395 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> Request header field is missing ':' separator.<br /> <pre> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /></pre> </p> </body></html> <script type="text/javascript" src="jscripts/reflection.js"></script> </head> <body> <iframe width="100%" height="15" scrolling="no" frameborder="0" marginwidth="0" marginheight="0"></iframe> <div id="ipbwrapper"><div id="ipbwrapper2"><div id="ipbwrapper3"> <center><!--ipb.javascript.start--> Выдает мне html от запрошенной страницы, а дальше выдает ещё и html главной. Не пойму в чем проблема?
как это может работать, если ты не шлешь данные POST? Ты хочешь сделать, чтоб работала прогрмма твоя или исследовать ответы сервера на неправильные запросы? не морочь любдя голову.
Ну для начала надо чтобы программа просто посылала post запрос на сервер, и получала ответ, а не плевалась. Я не знаю откуда брать размер для Content-Length: 0
Описание протокола "http" в руки! Ибо отправить то не знаю что -> глупо Размер Content-Length -> число букв того после "Content-Length" в данном случае буквы у нас эти: SAVEURL=&SERVER=1&account=111&pass=222&submit=%C2%EE%E9%F2%E8
Так, действительно сглупил, забыл отправить post данные отправил только пакет) Теперь проблема осталась только в том, что я получаю html от моего .php скрипта, а следом за ним html главной страницы (Причем http ответ только один, раньше их было 2, второй был 400 т.е ошибочный запрос) Сам post запрос Code: POST /bl.php HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://127.0.0.1/bl.htm Cookie: testcookie=1 Content-Type: application/x-www-form-urlencoded Content-Length: 61 SAVEURL=&SERVER=1&account=111&pass=222&submit=%C2%EE%E9%F2%E8 Теперь он точный Вот что получается