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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Delphi - http post через winsock (https://forum.antichat.xyz/showthread.php?t=178617)

Fedcomp 13.02.2010 20:46

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

Fedcomp 13.02.2010 20:51

Код:

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

Это запрос который пытаюсь отправить

rikko 13.02.2010 21:35

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 равен, на самом деле

Fedcomp 13.02.2010 22:02

Код:

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>
&lt;link rel=&quot;shortcut icon&quot; href=&quot;favicon.ico&quot; type=&quot;image/x-icon&quot; /&gt;</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 главной. Не пойму в чем проблема?

rikko 13.02.2010 22:24

как это может работать, если ты не шлешь данные POST? Ты хочешь сделать, чтоб работала прогрмма твоя или исследовать ответы сервера на неправильные запросы? не морочь любдя голову.

Fedcomp 13.02.2010 22:52

Ну для начала надо чтобы программа просто посылала post запрос на сервер, и получала ответ, а не плевалась.
Я не знаю откуда брать размер для Content-Length: 0

wolmer 13.02.2010 22:58

Цитата:

Сообщение от Fedcomp
Ну для начала надо чтобы программа просто посылала post запрос на сервер, и получала ответ, а не плевалась.
Я не знаю откуда брать размер для Content-Length: 0

Описание протокола "http" в руки! Ибо отправить то не знаю что -> глупо
Размер Content-Length -> число букв того после "Content-Length"

в данном случае буквы у нас эти:
SAVEURL=&SERVER=1&account=111&pass=222&submit=%C2% EE%E9%F2%E8

Fedcomp 14.02.2010 12:19

Так, действительно сглупил, забыл отправить 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


Время: 09:08