3

我正在使用以下代码使用基本身份验证连接到 Web 服务:

var
  RIO: THTTPRIO;
begin
  RIO := THTTPRIO.Create(nil);

  EndPoint := GetWebServicePort(True, '', RIO);

  RIO.HTTPWebNode.UserName := 'xxxx';
  RIO.HTTPWebNode.Password := 'yyyy';
...
end;

如果用户名和密码正确,一切正常。但是,如果它们不正确,则会弹出一个 Windows 对话框,要求提供正确的凭据。我需要捕捉错误而不是对话框。

在此处输入图像描述

如何停止弹出对话框?我搜索并找到了几个结果(Link 1Link 2),但似乎都没有提供真正的解决方案。

4

1 回答 1

1

要捕获错误,您可以使用 HTTP 客户端库,例如 Indy TIdHTTP,首先对 Web 服务地址运行 HTTP GET(或 HEAD)请求,然后捕获用户/密码错误时引发的异常。

uses
  ... IdHTTP ...;

...
var
  HTTP: TIdHTTP;

ValidCredentials := False;
...    
HTTP.Request.Username := username;
HTTP.Request.Password := password;
HTTP.Request.BasicAuthentication := True;
try
  HTTP.Head(url);
  ValidCredentials := HTTP.ResponseCode = 200;
except
  on ... (some Indy exception) do
  begin
    // signal that username / password are incorrect
    ...
  end;
end;

if ValidCredentials then
begin
  // invoke Web Service ...
于 2015-02-23T12:53:07.860 回答