2010-12-16 1 views
3

J'essaie d'utiliser un service Web avec Delphi 2010. Ce service Web est sur le port 8000 avec authentification.consommer un service Web avec l'authentification donne toujours un message Authentification requise

je mettre en œuvre le

function TForm4.EncodeLoginPW(const ALogin, APW: string): string; 
begin 
    Result := EncdDecd.EncodeString(ALogin + ':' + APW); // EncdDecd is not documented in 
end; 


procedure TForm4.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; 
    Data: Pointer); 
var 
    s: string; 
begin 
    s := 'Authorization: Basic ' + EncodeLoginPW(UserName, Password); 
    if not HttpAddRequestHeaders(Data, PChar(s), Length(s), HTTP_ADDREQ_FLAG_ADD) then 
    ShowMessage('HttpAddRequestHeaders' + SysErrorMessage(GetLastError())); 
end; 

mais je dois encore le message "Authentification requise".

Est-ce que je fais quelque chose de mal?

+1

De quel type d'authentification s'agit-il? Pouvez-vous exécuter avec succès une requête d'un navigateur Web avec l'URL et le port donnés? – mjn

+0

Le type d'anthentication est basique. –

+0

Pouvez-vous exécuter une requête «manuelle» d'un navigateur Web vers l'URL du service? (le navigateur demandera habituellement l'authentification) – mjn

Répondre

2

Pour l'authentification de base cela devrait fonctionner:

Basic Authentication in Delphi 7 SOAP

Comme expliqué dans this post, les nouvelles versions de Delphi permettent également d'utiliser

HTTPRio.HTTPWebNode.UserName := Username; 
HTTPRio.HTTPWebNode.Password := Password; 
+0

J'ai également essayé ceci avant l'événement de BeforePost ... –

0

Si cela ne fonctionne toujours pas, vous pouvez essayer un client différent (.Net ou Java), et comparez le trafic HTTP à l'aide d'un proxy local (Fiddler ou Don's Proxy) ou d'un sniffer (WireShark), pour trouver les différents ces.

+0

J'ai également le problème avec dotnet et RemoteObject SDK :( –

Questions connexes