3

我有一个 Delphi XE6 应用程序,我想将它安装在 Android 手机上。我正在 Windows 平台上对其进行测试。下面是我的单元源代码。在我的表单上,我有一个按钮、idHttp Indy 工具和一个备注字段。

问题是当我单击按钮时出现错误

HTTP/1.1 403 禁止。

但是我可以通过浏览器访问该站点,因此该页面不被禁止。任何人都可以看到问题吗?

我搜索了如何使用 firemonkey 和 delphi 进行发布请求,并找到了以下链接:

这些都没有帮助我。

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.
4

2 回答 2

0

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

Request.UserAgent := 
      'Mozilla/5.0 (Windows NT 5.1; rv:2.0b8) Gecko/20100101 Firefox/4.0b8';
于 2014-05-20T10:42:59.990 回答
0

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

于 2014-05-20T15:06:42.340 回答