Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как получить POST данные

Delphi , Интернет и Сети , Браузер

Как получить POST данные

Автор: Craig Foley

Реальность, переходящая в виртуальность: Посмотрел порно сайт и заразил компьютер вирусом.

Если данные передаются в формате '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 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.}

Автор: Hans Gulo

А это другой способ:


procedure TForm1.SubmitPostForm;
var
  strPostData: string;
  Data: Pointer;
  URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
begin
  {
  <!-- 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>
  }
  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 automatically replace
                         // this captions same values
  WebBrowser1.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
end;



Для получения POST-данных в Delphi можно использовать компонент TWebBrowser и его метод Navigate2.

Вот шаг за шагом, как это работает:

  1. Сначала создайте экземпляр TWebBrowser и добавьте его на ваш форм.
  2. Затем определите процедуру, которая будет обрабатывать POST-запрос. В этом случае процедура - SubmitPostForm.
  3. В процедуре установите переменную strPostData в фактические POST-данные, которые вы хотите отправить. Это может быть в формате name1=value&name2=value&...
  4. Создайте массив variant (PostData) и заполните его содержимым strPostData.
  5. Закройте массив variant с помощью VarArrayLock и скопируйте содержимое strPostData в массив variant с помощью Move.
  6. Наконец, вызовите метод Navigate2 компонента TWebBrowser, передавая URL, флаги, имя целевой рамки, POST-данные и заголовки.

Вот пример использования этого кода:

procedure TForm1.SubmitPostForm;
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;

В этом коде отправляется 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:26:44/0.0055830478668213/1