2010-12-16 77 views
3

我嘗試在Delphi 2010中使用一個Web服務。 此Web服務位於具有身份驗證的端口8000上。使用身份驗證的消費Web服務提供消息需要身份驗證

我實現

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; 

,但我還有消息 「需要驗證」。

我做錯了什麼?

+1

它是哪種認證類型?您能否使用給定的URL和端口成功執行來自Web瀏覽器的請求? – mjn 2010-12-16 10:26:18

+0

反證型是基本的。 – 2010-12-16 12:54:08

+0

您可以執行從Web瀏覽器到服務URL的「手動」請求嗎? (瀏覽器通常會要求認證) – mjn 2010-12-17 08:47:10

回答

2

的基本身份驗證這應該工作:

Basic Authentication in Delphi 7 SOAP

this post解釋,德爾福的較新版本還允許使用

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

我也在BeforePost事件之前試過這個... – 2010-12-17 07:55:16

0

如果還是不行,可以試試一個不同的客戶端(.Net或Java),並在本地代理(FiddlerDon's Proxy)或嗅探器(WireShark)的幫助下比較HTTP流量,以找到相關的差異CES。

+0

我也有問題dotnet和RemoteObject SDK :( – 2010-12-19 16:15:12