8

我正在尝试使用 Indy HTTP 类进行 HTTP 身份验证。但是由于某些未知原因,我在这一行中遇到访问冲突错误: IdHTTP1.Request.Authentication.Username := Username;

代码延伸是:

  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.Authentication.Username := Username;
  IdHTTP1.Request.Authentication.Password := Password;
      try
        IdHTTP1.Get(PbxURL);
        HttpCode := IdHTTP1.ResponseCode;
      except
        on E: EIdHTTPProtocolException do
          HttpCode := IdHTTP1.ResponseCode;

我正在使用 Delphi 2010,并且已经尝试过类似的操作: IdHTTP1.Request.Authentication.Username := 'admin'; 但没有解决问题...

4

2 回答 2

20

通过快速检查,当为真时,似乎IdHTTP.Request.Authentication不需要(因此没有创建) 。Request.BasicAuthentication您应该使用Request.UserNameandRequest.Password代替。

IdHTTP1:= TIdHttp.Create(Application);
IdHTTP1.ConnectTimeout:= 10000;
IdHTTP1.Request.Clear;
IdHTTP1.Request.BasicAuthentication:= true;
IdHTTP1.Request.UserName := UserName;
IdHTTP1.Request.Password := Password;
于 2012-09-15T20:56:22.753 回答
3

默认情况下,在Request.Authentication发送请求并接收到身份验证响应之前不会分配对象,然后OnSelectAuthorization触发事件以确定为后续请求分配对象的类类型。

可以分配对象的唯一另一种方法Request.Authentication是,如果您在发送请求之前在自己的代码中手动执行此操作,例如,如果您提前知道服务器使用哪种身份验证方案,而无需发送请求以动态发现该方案。

于 2012-09-16T03:17:08.370 回答