Реальность, переходящая в виртуальность:
Посмотрел порно сайт и заразил компьютер вирусом.
Если данные передаются в формате 'animal=cat&color=brown' и т.д., то
попробуйте использовать следующий код:
procedure TDBModule.Navigate(stURL, stPostData: String; var wbWebBrowser: TWebBrowser);
var
vWebAddr, vPostData, vFlags, vFrame, vHeaders: OleVariant;
iLoop: Integer;
begin{Are we posting data to this Url?}if Length(stPostData)> 0 thenbegin{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// Iteratebegin
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.}
Для получения POST-данных в Delphi можно использовать компонент TWebBrowser и его метод Navigate2.
Вот шаг за шагом, как это работает:
Сначала создайте экземпляр TWebBrowser и добавьте его на ваш форм.
Затем определите процедуру, которая будет обрабатывать POST-запрос. В этом случае процедура - SubmitPostForm.
В процедуре установите переменную strPostData в фактические POST-данные, которые вы хотите отправить. Это может быть в формате name1=value&name2=value&...
Создайте массив variant (PostData) и заполните его содержимым strPostData.
Закройте массив variant с помощью VarArrayLock и скопируйте содержимое strPostData в массив variant с помощью Move.
Наконец, вызовите метод Navigate2 компонента TWebBrowser, передавая URL, флаги, имя целевой рамки, POST-данные и заголовки.
Вот пример использования этого кода:
procedureTForm1.SubmitPostForm;varstrPostData:string;Data:Pointer;URL,Flags,TargetFrameName,PostData,Headers:OleVariant;beginstrPostData:='FIRSTNAME=Hans&LASTNAME=Gulo&NOTE=thats+it';PostData:=VarArrayCreate([0,Length(strPostData)-1],varByte);Data:=VarArrayLock(PostData);tryMove(strPostData[1],Data^,Length(strPostData));finallyVarArrayUnlock(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;
В этом коде отправляется POST-запрос на http://127.0.0.1/cgi-bin/register.pl с данными:
FIRSTNAME=Hans
LASTNAME=Gulo
NOTE=thats+it
Вы можете изменить этот код, чтобы отправлять другие POST-данные, изменяя значение strPostData.
Обратите внимание, что в втором примере автор использует более сложный подход для создания POST-данных. Это涉гывает создание массива variant и его блокировку перед копированием содержимого strPostData в массив variant. Функция VarArrayLock используется для блокировки массива variant, пока вы изменяете его, а затем он разблокируется с помощью VarArrayUnlock.
В статье описаны два способа получения POST-данных в Delphi: с помощью процедуры TDBModule.Navigate и с помощью процедуры TForm1.SubmitPostForm.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.