gpt4 book ai didi

delphi - 如何在调用Web服务期间防止对话框(基本身份验证提示)

转载 作者:行者123 更新时间:2023-12-03 15:01:42 25 4
gpt4 key购买 nike

在delphi程序(作为服务运行)中,我需要调用一些网络服务。
如果不需要基本身份验证,则调用可以正常工作。如果需要基本身份验证并使用以下方式提供用户名/密码(在 BeforePost 中),则调用也可以正常工作:

InternetSetOption(Data, INTERNET_OPTION_USERNAME,...
InternetSetOption(Data, INTERNET_OPTION_PASSWORD,...

但是,如果需要基本身份验证,并且未提供用户名/密码,则程序会弹出输入用户名/密码的提示(这在服务中是不行的)。

那么我怎样才能表明我不想要提示,而是想要错误呢?

据我所知,问题在于 SOAPHTTPTrans 函数 THTTPReqResp.Send(const ASrc: TStream): Integer; (第 762 行(该方法中第二次调用 InternetErrorDlg))。

编辑1:
如果我更改发送方法开头的标志(在 SOAPHTTPTRANS 中)以包含 INTERNET_FLAG_NO_AUTH,它会按我想要的方式工作。
但是我该如何在不更改 SAOPHTTPTrans 的情况下做到这一点(如果可能)?

编辑2:

ws := THTTPRIO.Create(Self);
ws.URL := 'http://excample.com/ws.asmx';
ws.HTTPWebNode.InvokeOptions := [soIgnoreInvalidCerts];
ws.HTTPWebNode.OnBeforePost := WebServiceCallBeforePost;
AvailabilityWebservice := (ws as AvailabilityServiceSoap);
sTemp := AvailabilityWebservice.GetVersion;

其中 AvailabilityServiceSoap 是使用 WSDL 导入器生成的接口(interface)。

最佳答案

我在尝试让 Windows Live Messenger 通过网络过滤器工作时遇到了这个问题。

我最终写了一个small program每隔一段时间就会自动进行身份验证。

希望这对您也有帮助。

uses
... IdHTTP ...;

...
var
httpGetter: TIdHTTP;
...
httpGetter.Request.Username := username;
httpGetter.Request.Password := password;
httpGetter.HandleRedirects := True;
httpGetter.Request.BasicAuthentication := True;

//custom useragent required to let live messenger work
//this part is probably not necessary for your situation
httpGetter.Request.UserAgent := 'MSN Explorer/9.0 (MSN 8.0; TmstmpExt)';

httpGetter.Get(url,MS);
...

关于delphi - 如何在调用Web服务期间防止对话框(基本身份验证提示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com