Вопрос
Версия языка:Delphi5.0
Нужен пример работы с компонентой TWebBrowser метод Navigate2: отправка Post-запроса, создание заголовка с заданием по всем полям своих значение.
Ответ
Два примера из Фака www.slo.ru и пример от Анатолия Тенцера www.listsoft.ru
Вопрос: Как получить POST данные?
Ответ: Если данные передаются в формате 'animal=cat&color=brown' и т.д., то попробуйте использовать следующий код:
procedure TMyNechto.Navigate(stURL, stPostData: String;
var wbWebBrowser: TWebBrowser);
{Автор: Craig Foley} var vWebAddr, vPostData, vFlags, vFrame, vHeaders: OleVariant;
iLoop: Integer;
begin {Are we posting data to this Url?} if Length(stPostData)> 0 then begin {Require this header information if there is stPostData.} vHeaders:= 'Content-Type: application/x-www-form-urlencoded'+ #10#13#0;
{Set the variant type for the vPostData.} vPostData:= VarArrayCreate([0, Length(stPostData)], varByte);
for iLoop := 0 to Length(stPostData)- 1 do // Iterate begin vPostData[iLoop]:= Ord(stPostData[iLoop+ 1]);
end;
// for {Final terminating Character.} vPostData[Length(stPostData)]:= 0;
{Set the type of Variant, cast} TVarData(vPostData).vType:= varArray;
end;
{And the other stuff.} vWebAddr:= stURL;
{Make the call Rex.} wbWebBrowser.Navigate2(vWebAddr, vFlags, vFrame, vPostData, vHeaders);
end;
{End of Navigate procedure.}
— * --
Ответ: А это другой способ:
procedure TForm1.SubmitPostForm;
{Автор: Hans Gulo.} { <!-- submit this html form: --> <form method="post" action="http://127.0.0.1/cgi-bin/register.pl">
<input type="text" name="FIRSTNAME"
value="Hans">
<input type="text" name="LASTNAME" value="Gulo">
<input type="text" name="NOTE" value="thats it">
<input type="submit">
</form> } var strPostData: string; Data: Pointer; URL, Flags, TargetFrameName, PostData, Headers: OleVariant; begin strPostData := 'FIRSTNAME=Hans&LASTNAME=Gulo&NOTE=thats+it';
PostData := VarArrayCreate([0, Length(strPostData) — 1], varByte);
Data := VarArrayLock(PostData);
try Move(strPostData[1], Data^, Length(strPostData));
finally VarArrayUnlock(PostData);
end;
URL := 'http://127.0.0.1/cgi-bin/register.pl';
Flags := EmptyParam; TargetFrameName := EmptyParam; Headers := EmptyParam;
// TWebBrowser автоматически заполнять // эти заголовки соответствующими значениями WebBrowser1.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
end;
— * --
var LoginDialog: TLoginDialog;
Flags, TargetFrameName, PostData, Headers: OleVariant;
S: String;
… with TLoginDialog.Create(Application) do try if ShowModal = mrOk then begin S := Format('UserName=%s&Password=%s', _ [Edit1.Text, Edit2.Text]);
PostData := VarArrayCreate([1, _ Length(S) + 1], varByte);
System.Move(S[1], VarArrayLock(PostData)^, _ Length(S) + 1);
VarArrayUnlock(PostData);
Headers := 'Content-Type: application/x-www-form-urlencoded'#10#13;
WebBrowser1.Navigate('http://intranetserver/secretpage', Flags, TargetFrameName, PostData, Headers);
end;
finally Free;
end;
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация