C#从Internet Explorer获取代理服务器设置 [英] C# Getting proxy settings from Internet Explorer

查看:2382
本文介绍了C#从Internet Explorer获取代理服务器设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我曾在某公司在德国的一个问题。他们使用代理他们的网络中,而我的程序不能与服务器进行通信

i have a problem in certain company in germany. They use proxy in their network and my program cant communicate with server.

IE浏览器的工作原理与此设置:

IE works with this settings:

这意味着:
自动检测设置

It means: Automatically detect settings

这是代码:

public static bool CompleteValidation(string regKey)
{
    string uri = "***";

    int c = 1;
    if (Counter < 5) c = 6 - Counter;
    string response = "";
    try
    {
        System.Net.ServicePointManager.Expect100Continue = false;
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.AllowWriteStreamBuffering = true;
        request.Method = "POST";
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0";
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        request.Headers.Add(HttpRequestHeader.AcceptLanguage, "pl,en-us;q=0.7,en;q=0.3");
        request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
        request.Headers.Add(HttpRequestHeader.AcceptCharset, "ISO-8859-2,utf-8;q=0.7,*;q=0.7");
        request.KeepAlive = true;

        //proxy settings
        string exepath = Path.GetDirectoryName(Application.ExecutablePath);
        string proxySettings = exepath + @"\proxy.ini";
        WebProxy wp = new WebProxy();
        if (File.Exists(proxySettings)) {
            request.Proxy = WebRequest.DefaultWebProxy;
            IniFile ini = new IniFile(proxySettings);
            string user = ini.IniReadValue("Proxy", "User");
            string pass = ini.IniReadValue("Proxy", "Password");
            string domain = ini.IniReadValue("Proxy", "Domain");
            string ip = ini.IniReadValue("Proxy", "IP");
            string port_s = ini.IniReadValue("Proxy", "Port");
            int port = 0;
            if (!string.IsNullOrEmpty(ip))
            {
                if (!string.IsNullOrEmpty(port_s))
                {
                    try
                    {
                        port = Convert.ToInt32(port_s);
                    }
                    catch (Exception e)
                    {
                        ErrorLog.AddToLog("Problem with conversion of port:");
                        ErrorLog.AddToLog(e.Message);
                        ErrorLog.ShowLogWindow();
                    }
                    wp = new WebProxy(ip, port);
                } else {
                    wp = new WebProxy(ip);
                }

            }
            if (string.IsNullOrEmpty(domain))
                wp.Credentials = new NetworkCredential(user, pass);
            else
                wp.Credentials = new NetworkCredential(user, pass, domain);
            request.Proxy = wp;
        }

        string post = "***";
        request.ContentLength = post.Length;
        request.ContentType = "application/x-www-form-urlencoded";
        StreamWriter writer = null;
        try
        {
            writer = new StreamWriter(request.GetRequestStream()); // Here is the WebException thrown
            writer.Write(post);
            writer.Close();
        }
        catch (Exception e)
        {
            ErrorLog.AddToLog("Problem with request sending:");
            ErrorLog.AddToLog(e.Message);
            ErrorLog.ShowLogWindow();
        }
        HttpWebResponse Response = null;
        try 
        {
           Response  = (HttpWebResponse)request.GetResponse();
        }
        catch (Exception e)
        {
            ErrorLog.AddToLog("Problem with response:");
            ErrorLog.AddToLog(e.Message);
            ErrorLog.ShowLogWindow();
        }

        //Request.Proxy = WebProxy.GetDefaultProxy();
        //Request.Proxy.Credentials = CredentialCache.DefaultCredentials;
        string sResponseHeader = Response.ContentEncoding; // get response header

        if (!string.IsNullOrEmpty(sResponseHeader))
        {
            if (sResponseHeader.ToLower().Contains("gzip"))
            {
                byte[] b = DecompressGzip(Response.GetResponseStream());
                response = System.Text.Encoding.GetEncoding(Response.ContentEncoding).GetString(b);
            }
            else if (sResponseHeader.ToLower().Contains("deflate"))
            {
                byte[] b = DecompressDeflate(Response.GetResponseStream());
                response = System.Text.Encoding.GetEncoding(Response.ContentEncoding).GetString(b);
            }
        }
        // uncompressed, standard response
        else
        {
            StreamReader ResponseReader = new StreamReader(Response.GetResponseStream());
            response = ResponseReader.ReadToEnd();
            ResponseReader.Close();
        }
    }
    catch (Exception e)
    {
        ErrorLog.AddToLog("Problem with comunication:");
        ErrorLog.AddToLog(e.Message);
        ErrorLog.ShowLogWindow();
    }

    if (response == "***")
    {
        SaveKeyFiles();
        WriteRegKey(regKey);
        RenewCounter();
        return true;
    }
    else
    {
        return false;
    }

}



我的程序记录为:

My program logs it as:

[09:13:18] Searching for hardware ID
[09:13:56] Problem with response:
[09:13:56] The remote server returned an error: (407) Proxy Authentication Required.
[09:15:04] problem with comunication:
[09:15:04] Object reference not set to an object instance.

如果他们写的用户,并传递到proxy.ini文件,程序工作。但问题是他们不能做到这一点。并以某种方式IE工程离不开它。有没有办法让IE浏览或系统的那些设置

If they write user and pass into proxy.ini file, program works. But the problem is they cant do that. And somehow IE works without it. Is there any way to get those settings from IE or system?

推荐答案

使用的GetSystemWebProxy 返回系统默认的代理是什么。

Use GetSystemWebProxy to return what the system default proxy is.

    WebRequest.DefaultProxy = WebRequest.GetSystemWebProxy();



但每次的 HttpWebRequest的应自动与默认情况下此信息填写。例如,在一个独立的控制台应用程序下面的代码片段应打印用配置的PAC文件系统上的正确的信息。

But every HttpWebRequest should automatically be filled out with this information by default. For example, the following snippet in a standalone console application should print the correct information on a system with a PAC file configured.

    HttpWebRequest myWebRequest=(HttpWebRequest)WebRequest.Create("http://www.microsoft.com");

    // Obtain the 'Proxy' of the  Default browser.  
    IWebProxy proxy = myWebRequest.Proxy;
    // Print the Proxy Url to the console.
    if (proxy != null)
    {
        Console.WriteLine("Proxy: {0}", proxy.GetProxy(myWebRequest.RequestUri));
    } 
    else
    {
        Console.WriteLine("Proxy is null; no proxy will be used");
    }

这篇关于C#从Internet Explorer获取代理服务器设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆