使用Indy http(idHTTP1.Get)从Delphi 2005升级到2010后授权问题

时间:2011-07-18 12:39:01

标签: delphi delphi-2010 indy10 idhttp

我正在从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;    

由于 萨姆

1 个答案:

答案 0 :(得分:6)

您是否尝试使用Basic Auth进行身份验证?

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

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