我想用代理使用Delphi VCL组件TWebBrowser。这似乎是很容易做这样的事情:Delphi TWebBrowser - 如何使用代理登录/密码?
var PIInfo: PInternetProxyInfo;
begin
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
PIInfo^.lpszProxy := PAnsiChar('proxyserver.com:8888');
PIInfo^.lpszProxyBypass := PAnsiChar('');
UrlMkSetSessionOption(INTERNET_OPTION_PROXY, PIInfo, SizeOf(Internet_Proxy_Info), 0);
end;
但我也想使用代理与身份验证。在这里我遇到了麻烦。我才知道这是可能的使用WinAPI的功能InternetSetOption,下面的例子来设置代理服务器名和密码:
var UserName: AnsiString;
ConnectionHandle: HINTERNET;
begin
// Init ConnectionHandle here
//...
res := InternetSetOption(ConnectionHandle,
INTERNET_OPTION_PROXY_USERNAME,
UserName,
Length(UserName) + 1);
end;
我得知InternetSetOption与像INTERNET_OPTION_PROXY_USERNAME参数可以仅适用于由类似功能所产生的互联网手柄InternetConnect或HttpOpenRequest。
关于此问题的答案可以在here找到。
这不是问题,我可以先拨打InternetConnect。但似乎是不可能的后绑定这个互联网句柄我的TWebBrowser。 TWebBrowser会忽略这些设置,因为它们适用于具体的专用互联网句柄。
所以我的问题:是否有可能在Delphi代码中使用身份验证设置代理以从TWebBrowser使用它?
PS。另一种选择是当TWebBrowser询问它们时记住登录/密码代理设置,但我有多个登录名/密码,所以我想从代码中设置它们。
先谢谢您。
http://microsoft.public.inetsdk.programming.webbrowser-ctl.narkive.com/rgz718KC/how-to-pass-proxy-username-password-into-webbrowser-control –
仅供参考,您的第一个代码片段是错误。你正在声明一个没有指向任何东西的未初始化的指针。你需要使用它:'var IInfo:InternetProxyInfo;开始IInfo.dwAccessType:= INTERNET_OPEN_TYPE_PROXY; ... UrlMkSetSessionOption(INTERNET_OPTION_PROXY,@IInfo,SizeOf(IInfo),0);结束;' –
雷米Lebeau,是的,完全。其实我忘了在代码中添加这个代码片段:New(PIInfo); ..... Dispose(PInfo); –