Просмотр полной версии : Delphi - http post через winsock
Всем привет, пишу программу для логина на сайте. Но проблема в двух вещах :
1. я очень плохо знаю винсок (кучу примеров скачивал но их очень трудно разобрать)
2. Нужно отправить сразу два http post запроса на два разных url (192.168.1.48/login.php и 192.168.1.48/auth.php, такая там мудренная система логина через ajax)
Пока получилось на локальном компьютере лишь это :
http://s006.radikal.ru/i213/1002/1f/365a49c565f3.jpg
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
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+60788e255743c74f1c32955de4b e94b2+1;
Content-Type: application/x-www-form-urlencoded
Content-Length: 16
Это запрос который пытаюсь отправить
Fedcomp, запрос должен быть такой:
'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+
'SAVEURL=&SERVER=1&account=111&pass=222&submit=%C2%EE%E9%F2%E8'#13#10
ты не посылаешь часть, что выделена оранжевым, судя по твоему примеру. это и есть сам пост запрос.
плюс проверь все переносы строк и их количество.
'Content-Length: 16' - у тебя он не 16 равен, на самом деле
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
Такой тоже не прокатывает.
Получается интересный результат - Веб сервер выдает мне вот это
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
Ну для начала надо чтобы программа просто посылала 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 запрос 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
Теперь он точный
Вот что получается
http://s005.radikal.ru/i212/1002/5f/641400b9af17.jpg
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot