401 Mit Indy IdHttp-Digest-Authentifizierung in Delphi XE
Versuchen zu tun, ein get() mit Digest-zu einem partner-web service mit Delphi XE.
Ich habe IdAuthenticationDigest
zu der uses-Klausel, die automatisch arbeiten, von dem, was ich gelesen habe - aber ich muss etwas fehlen, da bin ich immer einen 401-Unauthorized.
Code:
begin
// Init request:
IdHttp := TIdHttp.Create(nil);
try
idHttp.Request.ContentType := self.inputType; // 'application/xml'
idHttp.Request.Accept := self.outputType; //'application/json';
// Set request method:
idHttp.Request.Method := Method; // 'Get'
// Set username and password:
idHttp.Request.BasicAuthentication := False;
// IdHttp.Request.Username/Password also fails
IdHttp.Request.Authentication.Username := 'xx';
IdHttp.Request.Authentication.password := 'xx';
IdHttp.Request.ContentLength := Length(Body);
// Send request:
if Method = 'GET' then
Result := idHttp.Get(self.ServiceHost + URI)
else
if Method = 'POST' then
Result := idHttp.Post(self.ServiceHost + URI, SendStream);
finally
idHttp.Free;
end;
end;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die
Request.Username
undRequest.Password
Eigenschaften, anstatt dieRequest.Authentication
Eigenschaft. Legen Sie auch nicht dieRequest.Method
oderRequest.ContentLength
Eigenschaften. Diese drei Eigenschaften gelang durchTIdHTTP
intern.TIdHTTP
sendet eine schlechte Digest-request, oder es ist nicht das senden einer Digest-request an alle. Verwenden Sie einen Paket-sniffer, wie Wireshark, oder eine Indy eigenenTIdLog...
Komponenten, zu erfassen, dass der Verkehr.TIdHTTP.OnSelectAuthorization
Ereignis, dasAuthenticationClass
parameterTIdDigestAuthentication
auf input? Wenn nicht, dann ist entweder der server ist nicht zu Fragen, die für die Digest in den ersten Platz (was man überprüfen kann, mit derAuthInfo
parameter in das gleiche Ereignis), oderTIdDigestAuthentication
hat nicht wirklich registriert mitTIdHTTP
.AuthenticationClass
wird festgelegtTIdDigestAuthentication
imOnSelectAuthorization
Veranstaltung. Der API-partner den ich versuche zu schlagen, behauptet, der 2. der beiden Anträge, die bis macht eine Digest-request fehlt.Hinzufügen OnAuthorization Ereignis so etwas wie dieses:
Manchmal indy findet einige notwendig info. In meinem Fall, ich bin anschließen auf einem Tomcat-server haben, aber dies müssen die Get-Methode, wenn Sie die digest-params-Authentifizierung info gesendet.
Müssen Sie auch legen Sie die hoInProcessAuth Flagge, die vor der Durchführung BEKOMMEN.