Delphi XE6发布请求和indy

时间:2014-05-20 07:52:32

标签: android delphi indy delphi-xe6

我有一个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.

2 个答案:

答案 0 :(得分:0)

我会尝试将用户代理设置为模拟常见的Web浏览器,例如(取自this回答)

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

答案 1 :(得分:0)

403表示缺少HTTP层身份验证或发送错误的凭据。 TIdHTTP使用插件架构来处理HTTP身份验证。您需要向IdAuthentication...子句添加各种IdAllAuthentications单元或uses单元,以启用Indy支持的所需HTTP身份验证,如NTLM或摘要。还有一个TIdHTTP.OnSelectAuthorization事件可以更好地控制服务器支持多种类型时要使用的身份验证类型,以及TIdHTTP.OnAuthorization事件,以便在服务器请求时提示您获取新凭据。