Delphi XE6 发送 POST 请求和 Indy

3
我有一个Delphi XE6应用程序,我想将其安装在Android手机上。我正在Windows平台上进行测试。以下是我的单元源代码。在我的表单上,我有一个按钮、idHttp Indy工具和一个备忘录字段。
问题是,当我点击按钮时,我会得到错误HTTP/1.1 403 Forbidden。
但我可以通过浏览器访问该网站,所以该页面并不被禁止。有人能看出问题吗?
我已经搜索了如何使用firemonkey和delphi进行POST请求的文章,并找到了以下链接:
- 如何使用WinInet在Delphi 2010中发送HTTP Post请求 - Delphi XE中的POST请求 - HTTP POST请求中参数是如何发送的? 但是这些都没有帮助我。
unit Start_Interface_u;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes,
  System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  FMX.Layouts, FMX.Memo;

type
  TForm1 = class(TForm)
    btnLogin: TButton;
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    procedure btnLoginClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

  {$R *.fmx}


  procedure TForm1.btnLoginClick(Sender: TObject);
  Var
    sResult: String;
    DataToSend :TStringList;
  begin

  DataToSend := TStringList.Create;
  //DataToSend.Add('login_email=some_email');
  //DataToSend.Add('login_pass=some_password');
  IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';

  Memo1.Lines.Add(idHTTP1.Post('http://mysite.co.za/dash.php', DataToSend));

  end;

end.
2个回答

0

我会尝试设置用户代理来模拟常见的网络浏览器,例如(取自this答案)

Request.UserAgent := 
      'Mozilla/5.0 (Windows NT 5.1; rv:2.0b8) Gecko/20100101 Firefox/4.0b8';

0

403 表示缺少 HTTP 层身份验证或发送了不正确的凭据。 TIdHTTP 使用插件架构处理 HTTP 身份验证。 您需要添加各种 IdAuthentication... 单元,或者将 IdAllAuthentications 单元添加到您的 uses 子句中,以启用 Indy 支持的所需 HTTP 身份验证,如 NTLM 或 Digest。 如果服务器支持多种类型,则还有一个 TIdHTTP.OnSelectAuthorization 事件,用于更精细地控制要使用的身份验证类型,并且一个 TIdHTTP.OnAuthorization 事件,用于在服务器请求新凭据时提示您输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接