当我连接到使用基本身份验证使用下面的代码Web服务:如何停止验证对话框出现使用THTTPRIO
var
RIO: THTTPRIO;
begin
RIO := THTTPRIO.Create(nil);
EndPoint := GetWebServicePort(True, '', RIO);
RIO.HTTPWebNode.UserName := 'xxxx';
RIO.HTTPWebNode.Password := 'yyyy';
...
end;
如果用户名和密码是正确的,一切工作正常。但是,如果它们不正确,将弹出一个Windows对话框,请求正确的凭据。我需要捕捉错误,而不是对话框。
如何停止的对话框弹出?我搜索并找到了一些结果(Link 1,Link 2),但似乎都没有提供真正的解决方案。
这是THttpRio组件中的一个旧的未解决的错误。使用替代Indy – RBA 2015-02-23 13:13:07
这是因为Delphi中的Web服务实现使用“错误的”Windows API - 使用WinInet而不是WinHTTP。正如MSDN明确指出的那样(https://msdn.microsoft.com/en-us/library/windows/desktop/aa382925%28v=vs.85%29.aspx),“WinINet显示一些操作的用户界面,如收集用户凭证,但是,WinHTTP以编程方式处理这些操作。“这也是非常危险的,因为如果您在服务中使用它,服务可能会“挂起”等待用户输入,因为该对话框不会显示在任何用户可访问的桌面上,所以无法输入。 – LDS 2015-02-23 13:22:20
不知道这是否有用,因为我没有尝试过自己,我不确定它会停止'Windows'对话框,但可能事件处理程序'HTTPRIO.HTTPWebNode.OnWinInetError'可以携手?您需要检查“HTTP_STATUS_PROXY_AUTH_REQ”错误。 – 2015-02-23 13:31:22