我们有两份申请。他们用SOAP协议给网站打电话。
其中一个在我们的登录表单中询问登录数据;另一个是后台进程,预定的任务。他们两人都用InternetSetOption来做基础工作。
如果用户键入错误的用户名或密码,SOAP调用将显示一个IE对话框,以再次获得用户名/密码。
1.)这不是我们的风格。2.)对话是“无限的”,它说,只有成功或取消退出重新展示。3.)我们无法控制,会出现多少次。4.)在后台进程中,对话框会停止进程--这是非常关键的。
因此,我需要一些选项,或事件,以防止显示IE登录对话框。
如果登录名/密码错误,则程序必须使用401中止,而不会无限地显示IE对话框。
我该怎么做?
请帮我拿些密码。谢谢!
一些代码片段。但我认为这没有太大帮助。这是一个简单的带有基本auth的SOAP调用。但如果登录不正确,IE将显示他的对话框。
type TWSRIO = class(THTTPRIO)
...
end;
procedure TWSRIO.OnBeforePost(const HTTPReqResp: THTTPReqResp; Data:Pointer);
begin
if Auth_Mod = SCRBRIO_Auth_Basic then
begin
if not InternetSetOption(Data,INTERNET_OPTION_USERNAME,PChar(FAuth_LoginName), Length(FAuth_LoginName)) then
raise Exception.Create(SysErrorMessage(GetLastError));
if not InternetSetOption(Data, INTERNET_OPTION_PASSWORD, PChar(FAuth_Password), Length(FAuth_Password)) then
raise Exception.Create(SysErrorMessage(GetLastError));
end;
end;
procedure TForm1.Test;
begin
RIO := TWSRIO.Create(Self);
RIO.Auth_Mode := SCRBRIO_Auth_Basic;
RIO.Auth_LoginName := xxx;
RIO.Auth_Password := yyy;
...
o := GetStockQueryResponderInterface(False, GetURL(), RIO);
o.GetStockQuery(sArtNr)
...
end;
发布于 2020-11-23 08:42:42
也许解决办法是:
function TMyRIO.MyWiniNetError(LastError: DWord; Request: Pointer): DWord;
var
OWEProc: TWinInetErrorEvent;
begin
// When the LastError is zero, we return same code what the dialog does on Cancel
if LastError = 0 then
begin
Result := ERROR_SUCCESS;
Exit;
end;
if Assigned(HTTPWebNode) then
begin
try
// Save old proc and set to nil for Avoid infinite loop
OWEProc := Self.HTTPWebNode.OnWinInetError;
Self.HTTPWebNode.OnWinInetError := nil;
try
// Call the original handler
Result := Self.HTTPWebNode.HandleWinInetError(LastError, Request, True);
finally
// Restore our handler
Self.HTTPWebNode.OnWinInetError := OWEProc;
end;
except
on E: Exception do
begin
// On error we log the problem
LogThis(E.Message);
Result := ERROR_SUCCESS;
Exit;
end;
end;
end else
begin
Result := ERROR_SUCCESS;
Exit;
end;
end;
我不知道我们会有什么样的副作用。但是使用这段代码,我无法在错误的地址上获得Windows登录对话框。只是个错误。
https://stackoverflow.com/questions/64768139
复制相似问题