我想用代理使用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); –