【Delphi POST提交数据】

本文介绍如何使用Delphi的IdHTTP组件发送POST请求,设置User-Agent、Cookie等头信息,并处理返回的网页内容。重点展示了如何在请求中管理Cookie,适用于网页自动化测试或API调用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unit DcpMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    EditPostUrl: TEdit;
    Button1: TButton;
    MemoPostCookie: TMemo;
    MemoPostData: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    MemoPostRetinfo: TMemo;
    IdHTTP2: TIdHTTP;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var
  SendPostData:TSTringList;
  RetData:TStringStream;
  i:Integer;
  RetStr,DcpCookie,temp:string;
begin
        SendPostData:=TStringList.Create;
        RetData:=TStringStream.Create;

        IdHTTP2.AllowCookies := True;
    try
        IDHTTP2.Request.UserAgent:='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36 OPR/62.0.3331.99';
        IDHTTP2.Request.Host:='cg.vrbetapi.com';
        IdHTTP2.Request.Referer:='http://cg.vrbetapi.com/Bet/Index/34'; //要打开的网页
        IDHTTP2.Request.Accept:='*/*';
        IdHTTP2.Request.Connection := 'Keep-Alive';
        IdHTTP2.ReadTimeout:=30000;
        IdHTTP2.Request.CacheControl:='max-age=0';
        IDHTTP2.Request.ContentType:='application/x-www-form-urlencoded; charset=UTF-8';
        IDHTTP2.Request.AcceptEncoding:='gzip, deflate';
        IDHTTP2.Request.AcceptLanguage:= 'zh-CN,zh;q=0.9';
        IDHTTP2.HandleRedirects:=True;
        IdHTTP2.HTTPOptions:=IdHTTP2.HTTPOptions+[hoKeepOrigProtocol];
        IdHTTP2.ProtocolVersion:=pv1_1;

        //自定义cookie
        //IDHTTP2.Request.CustomHeaders.Text:=MmoCookie.Text;//放入cookie
        //IDHTTP2.Request.CustomHeaders.Add(MmoCookie.Text);//放入cookie
        IDHTTP2.Request.CustomHeaders.Values['Cookie']:=MemoPostCookie.Text;//放入cookie
        //提交的主题数据
        SendPostData.Add('请求的数据');

        //多行可以填加
        IDHTTP2.Post(EditPostUrl.Text,SendPostData,RetData);
        //获取网页返回的信息
        RetStr:=RetData.DataString;
        RetStr:=UTF8Decode(RetStr);
    //待测试
        if IdHTTP2.CookieManager.CookieCollection.Count > 0 then
            begin
              for i := 0 to IdHTTP2.CookieManager.CookieCollection.Count - 1 do
                begin
                  temp := temp + IdHTTP2.CookieManager.CookieCollection.Cookies[i].CookieText;
                end;
            end;
        MemoPostRetinfo.Text:=idhttp2.Response.RawHeaders.Text;
    finally
        RetData.Free;
        SendPostData.Free;
    end;
end;

end.

Delphi中的Django POST表单提交通常涉及到以下几个步骤: 1. **设置连接**: 首先,你需要导入所需的Django库,并创建一个连接到你的Django项目的`TIdHTTP`实例,这将用于发送HTTP请求。 ```delphi uses Django; var IdHttp: TIdHTTP; begin IdHttp := TIdHTTP.Create(nil); end; ``` 2. **配置POST数据**: 创建一个包含你想要发送的数据的`TStringList`,并将其转换为JSON(如果需要的话)。例如,如果你有一个名为`data`的记录集: ```delphi var Data: TStringList; RecordSet: TDataSet; Data := TStringList.Create; RecordSet.Open('SELECT * FROM YourTable'); try for I := 0 to RecordSet.RecordCount - 1 do begin Data.Add(FormatJson(RecordSet.FieldByName('Field1').AsVariant, 'Field2', ...)); end; finally RecordSet.Close; FreeAndNil(Data); end; ``` 3. **发起POST请求**: 设置URL为目标Django应用的API端点,并设置请求方法为POST。然后将数据添加到`TIdHTTP`的`Request.Body`属性: ```delphi IdHttp.Request.Method := TIdHttpRequest.MethodPost; IdHttp.Request.ContentType := 'application/json'; IdHttp.Request.Body.Text := Data.Text; ``` 4. **发送请求并处理响应**: 发送请求,然后检查返回的状态码以及响应内容。可以使用`TIdHTTP.Status`和`TIdHTTP.ResponseText`获取信息: ```delphi IdHttp.Send; if IdHttp.Status = httpOk then begin // 处理成功响应 var JsonResponse: TDjangoResponse = ParseJson(IdHttp.ResponseText) as TDjangoResponse; // 使用JsonResponse...处理数据 end else begin // 处理错误 ShowMessage('Error: ' + IdHttp.StatusDescription); end; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再创世纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值