title: C# Getting proxy settings from Internet Explorer
body: <p>i have a problem in certain company in germany. They use proxy in their network and my program cant communicate with server.</p>
  
  <p>IE works with this settings:</p>
  
  <p><img src="https://i.stack.imgur.com/Vk4nu.gif" alt="Their settings"></p>
  
  <p>It means:
  Automatically detect settings</p>
  
  <p>This is the code:</p>
  
  <pre><code>public static bool CompleteValidation(string regKey)
  {
      string uri = "***";
  
      int c = 1;
      if (Counter &lt; 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;
      }
  
  }
  </code></pre>
  
  <p>My program logs it as:</p>
  
  <pre><code>[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.
  </code></pre>
  
  <p>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?</p>