Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Грамотно составить POST


Автор: Koyan 10.7.2008, 13:41
Задача програмно пройти логин и пас(они известны) и войти на следующую страницу.
Перечитал все темы, попробовал лес вариантов 0 эмоций, сервер не найден и тп  smile 


HTML стартовой странички:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><title>BMR (Kieback&amp;Peter)</title><meta http-equiv="content-type" content="text/html; charset=UTF-8">
...
...
</head><body class="std"><div class="hg"><div class="dg"><img class="logo" src="/l.gif">
<div class="nav"></div><div class="tln"></div>
<div class="tlh">Веб-сервер BMR</div><div class="tlt"></div>
<div class="tgl"><form action="/bmrlogin.html" method="post">
<table class="lg"><tr><td align="right" class="tabshort">Пользователь</td>
<td align="left"><select size="1" name="usr" length="10"><option value="0">Пользователь&nbsp;0</option><option value="1">Пользователь&nbsp;1</option><option value="2">Пользователь&nbsp;2</option><option value="3">Пользователь&nbsp;3</option></select></td></tr>
<tr><td align="right" class="tabshort">Код доступа</td><td align="left">
<input type="password" name="pwd" size="10" maxlength="20" value="" class="lg"/></td>
</tr><tr><td>&nbsp;</td><td class="tablong" align="right"><input type="submit" value="Войти в систему"></td></tr></table></form><div class="lg">1


На логине стоит ниспадающий список, остальное стандартно....

Автор: Koyan 10.7.2008, 15:35
Отснифил POST

POST /bmrlogin.html HTTP/1.1
User-Agent: Opera/9.21 (Windows NT 5.1; U; ru)
Host: 192.168.00.97
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://192.168.00.97/bmrlogin.html
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
Content-Length: 14
Content-Type: application/x-www-form-urlencoded

usr=3&pwd=2460

Не понятно TE и HTTP/1.1 подставлять

Автор: Alkash 10.7.2008, 15:59
А IdHTTP юзать - не?

Автор: SneG0K 10.7.2008, 17:19
Та отправь ты уже как нибуть этот пост. Хоть через тот же IdTCP. 

Автор: Koyan 11.7.2008, 09:23
Да собственно через IdHTTP я и посылаю(D2007, XP)
один из вариантов(дело происходит в локалке):


procedure TForm1.Button1Click(Sender: TObject);
var
LoginInfo: TStrings;
Response: TStringStream;
begin
LoginInfo := TStringList.Create;
Response := TStringStream.Create('');
LoginInfo.Clear;
LoginInfo.Add('usr=3');
LoginInfo.Add('pwd=2460');
IdHTTP1.Host:='192.168.0.99';
IdHTTP1.Post('/bmrlogin.http',LoginInfo,Response);
Memo1.Clear;
Memo1.Lines.Add(Response.DataString);
Response.Free;
LoginInfo.Free;
end;

в снифе 0 эмоций.....

Добавлено через 14 минут и 11 секунд
 smile  Как не пробую сокет ерор и все тут.
Пробовал через HTTPReqResp1 post летит куда надо и в ответ код страницы авторизации.... Но как туда пас лог и все остальное.... не понятно

Автор: aktuba 11.7.2008, 16:42
Цитата(Koyan @  11.7.2008,  10:23 Найти цитируемый пост)
dHTTP1.Host:='192.168.0.99';
IdHTTP1.Post('/bmrlogin.http',LoginInfo,Response);

 smile это что такое????

Автор: Koyan 11.7.2008, 17:21
Так я пост отправляю, похож 1 в 1 с оригинальным..... но сервер возвращает только стартовую страницу в чем трабола..........


procedure TForm1.Button1Click(Sender: TObject);
var
fm:TStringList;
begin
fm:=TStringList.Create;
try
fm.Values['usr']:=edit1.Text;
fm.Values['pwd']:=edit2.Text;
memo1.text:=idhttp1.Post('http://192.168.0.97/bmrlogin.html',fm);
finally
fm.Free;
end;

end;

Подскажите пожалуйста :
Перед пост запросом не должена ли моя прога отправить GET запрос или чтонибуть подобное;
и как быть с  архивированием gzip, deflate..... может в них засада???

Автор: MetalFan 11.7.2008, 21:26
Цитата(Koyan @  11.7.2008,  17:21 Найти цитируемый пост)
Так я пост отправляю, похож 1 в 1 с оригинальным.....

чудес не бывает, значит не 1 в 1.

Автор: sai_NT 14.7.2008, 15:25
Не забывай о поле Referer HTTP запроса к серверу. Некоторые серваки не отдают "нормального" (нужного для тебя) ответа, если это поле пустое или левое.

И еще. Проснифай теперь тот запрос, который прогой передаешь и обрати внимание на: Connection, Content-Type

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)