Как настроить аутентификацию прокси в Internet Explorer? - PullRequest
1 голос
/ 13 сентября 2011

Я пытался установить имя пользователя и пароль для прокси IE некоторое время, но без хороших результатов, я пытаюсь с WebProxy, WebClient, и теперь я пытаюсь с InternetSetOption из Wininnet.dllидея заключается в том, чтобы избежать ввода имени пользователя и пароля каждый раз, когда пользователь открывает браузер.Вот код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Principal;
using System.Runtime.InteropServices;
using System.Net;
using System.ComponentModel;

namespace Proxy.Core
{
    public class ProxyImpersonator
    {
        private const int INTERNET_OPTION_PROXY_USERNAME = 43;
        private const int INTERNET_OPTION_PROXY_PASSWORD = 44;

        private const int INTERNET_OPEN_TYPE_PRECONFIG = 0; // use registry configuration
        private const int INTERNET_OPEN_TYPE_DIRECT = 1; // direct to net
        private const int INTERNET_OPEN_TYPE_PROXY = 3; // via named proxy
        private const int INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4; // prevent using java/script/INS

        [DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern bool InternetSetOption(IntPtr hInternet, int
        dwOption, string lpBuffer, int dwBufferLength);

        [DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
        static extern IntPtr InternetConnect(
           IntPtr hInternet, string lpszServerName, short nServerPort,
           string lpszUsername, string lpszPassword, int dwService,
           int dwFlags, IntPtr dwContext);

        [DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
        static extern IntPtr InternetOpen(
           string lpszAgent, int dwAccessType, string lpszProxyName,
           string lpszProxyBypass, int dwFlags);

        public static void Impersonate(Proxy Config)
        {
            IntPtr hOpen = InternetOpen("Proxy Connection", INTERNET_OPEN_TYPE_PROXY,Config.Address.ToString(),String.Empty, 0);
            IntPtr hInternet = InternetConnect(hOpen, Config.Address.URL, short.Parse(Config.Address.Port.ToString()), Config.UserID, Config.UserPwd, 3, 0, IntPtr.Zero);

            if (!InternetSetOption(hInternet,INTERNET_OPTION_PROXY_USERNAME,Config.UserID,Config.UserID.Length+1))
            {
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }

            if (!InternetSetOption(hInternet, INTERNET_OPTION_PROXY_PASSWORD, Config.UserPwd, Config.UserPwd.Length + 1))
            {
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }
        }

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...