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?).
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.