【发布时间】:2015-02-23 12:44:47
【问题描述】:
我正在使用以下代码使用基本身份验证连接到 Web 服务:
var
RIO: THTTPRIO;
begin
RIO := THTTPRIO.Create(nil);
EndPoint := GetWebServicePort(True, '', RIO);
RIO.HTTPWebNode.UserName := 'xxxx';
RIO.HTTPWebNode.Password := 'yyyy';
...
end;
如果用户名和密码正确,一切正常。但是,如果它们不正确,则会弹出一个 Windows 对话框,要求提供正确的凭据。我需要捕获错误而不是对话框。
【问题讨论】:
-
这是 THttpRio 组件中一个未解决的老错误。改用印地
-
这是因为 Delphi 中的 Web 服务实现使用了“错误的”Windows API——使用 WinInet 而不是 WinHTTP。正如 MSDN 明确指出的 (msdn.microsoft.com/en-us/library/windows/desktop/…),“WinINet 为某些操作(例如收集用户凭据)显示用户界面。然而,WinHTTP 以编程方式处理这些操作。”这也是非常危险的,因为如果您在服务中使用它,该服务可能会“挂起”等待用户输入,因为该对话框未显示在任何用户可访问的桌面中。
-
不确定这是否有用,因为我自己没有尝试过,我不确定它会停止
Windows对话框,但也许事件处理程序HTTPRIO.HTTPWebNode.OnWinInetError可以派上用场?您需要检查HTTP_STATUS_PROXY_AUTH_REQ错误。 -
请注意,您似乎可以将 WinHTTP 与 Delphi SOAP 一起使用:请参阅 stackoverflow.com/questions/26911550/…
-
@mjn - 即使在定义了 USE_INDY 之后,对话框仍然出现。
标签: delphi wininet delphi-xe7 idhttp