问题
my company's internet works on proxy server with Authentication(i.e. Browser prompts with window for username/password everytime i tried to access any web page).
Now i have some windows application which tries to access internet(like WebPI/Visual Studio 2008 for rss feeds), but as they are unable to popup the the authentication window, they are unable to connect with internet with error:
(407) Proxy Authentication Required
. Here the exception is VS2008, first time it always fails to load rss feeds on startup page, but when i click on the link, it shows authentication window and everything works fine after that.
my question is: How can i configure normal windows application(through app.config/app.manifest file) accessing web to able to show the authentication window or provide default credentials.
For explore this furthor, i have created one console application on VS2008 which tries to serach something on google and display the result on console. Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
namespace WebAccess.Test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter Serach Criteria:");
string criteria = Console.ReadLine();
string baseAddress = "http://www.google.com/search?q=";
string output = "";
try
{
// Create the web request
HttpWebRequest request = WebRequest.Create(baseAddress + criteria) as HttpWebRequest;
// Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Console application output
output = reader.ReadToEnd();
}
Console.WriteLine("\nResponse : \n\n{0}", output);
}
catch (Exception ex)
{
Console.WriteLine("\nError : \n\n{0}", ex.ToString());
}
}
}
}
When running this, It gives error
Enter Serach Criteria:
Lalit
Error :
System.Net.WebException: The remote server returned an error: (407) Proxy Authen
tication Required.
at System.Net.HttpWebRequest.GetResponse()
at WebAccess.Test.Program.Main(String[] args) in D:\LK\Docs\VS.NET\WebAccess.
Test\WebAccess.Test\Program.cs:line 26
Press any key to continue . . .
回答1:
Resolve myself:
Created an assembly to provide default proxy credentials
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
namespace ProxyCredProvider
{
public class DefProxy : IWebProxy
{
public ICredentials Credentials
{
get { return new NetworkCredential("xxxx", "xxxx"); }
set { }
}
public Uri GetProxy(Uri destination)
{
return new Uri("http://xx.xx.xx.xx:8080/");
}
public bool IsBypassed(Uri host)
{
return false;
}
}
}
Installed it to GAC. and use App.Config to attach the above module to any exe trying to access web.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="false">
<module type="ProxyCredProvider.DefProxy, ProxyCredProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5e3bf8f3a8a14cca" />
</defaultProxy>
</system.net>
</configuration>
回答2:
Edit:
There are a couple of utilities which will tunnel any app through a proxy listed at http://kakku.wordpress.com/2007/11/18/proxify-any-application-tsocks-and-proxychains-force-any-program-to-communicate-through-a-socks-https-proxy-or-use-cascading-proxies/ - look for the 'Windows Alternatives' links..
回答3:
Use a WebProxy object, then use the app.config to get proxyurl and username. For the password you might enter it in the console or throw up a password box.
WebProxy proxy = new WebProxy(proxyurl);
proxy.Credentials = new NetworkCredential(username, password, domain);
request.Proxy = proxy;
EDIT
Sorry I misunderstood how about NTLMAPS
来源:https://stackoverflow.com/questions/2873292/enable-proxy-authentication-for-normal-windows-application