【问题标题】:Problems with authorization after upgrading from Delphi 2005 to 2010 using Indy http (idHTTP1.Get)使用 Indy http (idHTTP1.Get) 从 Delphi 2005 升级到 2010 后的授权问题
【发布时间】:2011-10-07 15:50:11
【问题描述】:

我正在从 Delphi 2005 升级到 Delphi 2010。 我遇到了这个问题:以下过程在 D2005 上运行良好,但在 D2010 上我总是得到结果:

<HTML><HEAD><TITLE>401 Unauthorized</TITLE></HEAD>
<BODY><H1>401 Unauthorized</H1>
Your client does not have permission to get URL /axis-cgi/date.cgi from this server.
</BODY></HTML>

在程序上,我尝试连接两次,因为在 D2005 上,有时我第一次尝试得到未经授权的答案,然后我可以在第二次连接时没有问题。使用 D2010,我总是得到未经授权的答案。

Url = 'http://user:pass@xxx.xxx.xxx.xxx/axis-cgi/date.cgi?action=get'

function TViewCameraForm.HttpGet(idHTTP : TidHTTP; Url : AnsiString): AnsiString;
Var
  Res : AnsiString;
Begin
  idHTTP1.Disconnect;
  try
    Res := idHTTP1.Get(Url);
    If Pos('Unauthorized', Res) > 0 Then
        Res := idHTTP1.Get(Url);
    Result := Res;
  except
    on E: EIdHTTPProtocolException do begin
        Result := E.ErrorMessage
    end;
    on E: Exception do begin
        Result := E.message;
    end;
  end;

End;    

谢谢 山姆

【问题讨论】:

  • 我猜这是一个与 Unicode 相关的问题。
  • 您使用 AnsiString 有什么原因吗?
  • 有趣的是,扫描消息以查找魔术字符串而不是使用状态码。

标签: delphi delphi-2010 indy10 idhttp


【解决方案1】:

您是否尝试使用基本身份验证进行身份验证?

  ...
  idHTTP1.Request.BasicAuthentication := True;
  idHTTP1.Request.Username := 'user';
  idHTTP1.Request.Password := 'pass';
  Res := idHTTP1.Get(Url);

(使用 user:pass@website 不符合 HTTP 规范)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2013-12-21
    • 2012-02-23
    相关资源
    最近更新 更多