我正在使用以下代码使用基本身份验证连接到Web服务:
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),但似乎都没有提供真正的解决方案。
最佳答案
要捕获该错误,可以使用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 ...