2010-12-16 39 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