Question

I'm trying to communicate with a LAN (http://) server that needs digest authentication.

uses IdHttp, IdAuthenticationDigest;

...

begin
  IdHttp1 := TIdHttp.Create(nil);
  try
    IdHttp1.Request.Username := 'xxx';
    IdHttp1.Request.Password := 'xxx';

    Result := IdHttp1.Get(URL)
  finally
    idHttp1.Free;
  end;
end; 

Unfortunately I get a HTTP/1.0 401 Unauthorized as IdHttp1.ResponseText from the server. Both Firefox and Chrome connect fine if I enter the username and password.

I've the latest Indy 10 from SVN and Delphi 7.

The http header of the server (192.168.1.10 on LAN):

Connecting...
Resolving hostname dm7020hd.
Connecting to 192.168.1.10.
Connected.
Server: webserver/1.0
Date: Thu, 31 Jan 2013 11:28:32 GMT
WWW-Authenticate: Digest algorithm="MD5", realm="Forbidden", qop="auth", opaque="7edfc2c756ad1f795651f15f88c32b25", nonce="d2ef913b753b3b6ad8878b34b93cfc5a"
Content-Type: text/html
Cache-Control: no-store, no-cache, must-revalidate
Expires: Sat, 10 Jan 2000 05:00:00 GMT
Content-Length: 15
Last-Modified: Thu, 31 Jan 2013 11:28:32 GMT
ETag: "753868328"
Connection: close
Disconnected

I've googled alot about this problem and apparently a lot of people have trouble with indy authentication (does it work at all?).

Was it helpful?

Solution

You need to enable the hoInProcessAuth flag in the TIdHTTP.HTTPOptions property. It is disabled by default. Without that flag, TIdHTTP.Get() will not send a second HTTP request specifying the Digest credentials in reply to the server's 401 response. It will simply exit and expect you to handle the 401 response and send a new request yourself as needed.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top