1

wininet でプロキシのユーザー名とパスワードを設定する際に問題が発生しています。

次のコードはプロキシを設定しますが、ユーザー名とパスワードはエラー コード "12018" で失敗します

[DllImport("wininet.dll", SetLastError = true)]
    private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);

private void RefreshIESettings(string strProxy,string proxyUsername,string proxyPassword) {

const int INTERNET_OPTION_PROXY = 38;
const int INTERNET_OPEN_TYPE_PROXY = 3;
const int INTERNET_OPTION_PROXY_USERNAME = 43;
const int INTERNET_OPTION_PROXY_PASSWORD = 44;

IntPtr username = Marshal.StringToHGlobalAnsi(proxyUsername);
IntPtr  password = Marshal.StringToHGlobalAnsi(proxyPassword);
INTERNET_PROXY_INFO struct_IPI;
struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;

struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy);
struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local");

IntPtr intptrStruct = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI));
Marshal.StructureToPtr(struct_IPI, intptrStruct, true);
bool iReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, Marshal.SizeOf(struct_IPI));

Marshal.GetNativeVariantForObject(proxyUsername, username);
Marshal.GetNativeVariantForObject(proxyPassword, password);
bool resultF = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY_USERNAME, username, proxyUsername.Length);
var errorF = Marshal.GetLastWin32Error();

//-- Set Proxy Password
bool resultG = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY_PASSWORD, password, proxyPassword.Length + 1);
var errorG = Marshal.GetLastWin32Error();
4

1 に答える 1

0

プロキシのユーザー名とパスワードのオプションには、InternetOpen 呼び出しからの有効な hInternet ハンドルが必要ですが、これは Web ブラウザー コントロールから抽出できませんでした。

最終的には、win32 WM_INITDIALOG メッセージをフックして、ユーザー名、パスワード、OK 要素が見つかるまで子ウィンドウ オブジェクトをトラバースし、提供された資格情報を自動入力してから送信する必要がありました。

非常にハックですが、機能します。この特定のプロキシ資格情報要求に対して実行する IAuthenticate.Authenticate 関数を取得できませんでした。基本的な Windows 認証プロンプトに対してのみ呼び出されるようです。

参照用にこれらを参照してください。

Web ブラウザ コントロールでプロキシ資格情報を設定する

SYSTEM/IE プロキシに影響を与えずに Webbrowser Control のプロキシを設定する方法

于 2010-12-16T19:24:03.310 に答える