有一个代理配置为最初使用 NTLM 协议进行身份验证,然后在基本身份验证方法之后进行身份验证。两种方法都可以正常工作。如果启用 NTLM 访问,所有 Internet 浏览器(IE、Chrome 和 Firefox)都可以使用。如果禁止 NTLM 访问,则只有 FF 正确处理这种情况。最初 FF 显示 NTLM 身份验证对话框,在按下对话框的取消按钮后,它显示基本方法的第二个身份验证对话框。输入正确的登录名和密码,FF就可以上网了。其他浏览器无法使用登录名和密码进行身份验证。
有一个任务是编写一个使用基本身份验证方法通过代理工作的程序。它应该使用WebProxy类。
我写了两种不同的方法来进行身份验证。第一个是直接使用NetworkCredential类实例WebProxy
。
static private IWebProxy GetProxy00(string proxy_address, string proxy_login, string proxy_password) {
WebProxy proxy = new WebProxy(proxy_address, true);
proxy.Credentials = new NetworkCredential(proxy_login, proxy_password);
proxy.UseDefaultCredentials = false;
return proxy;
}
第二种方法使用CredentialCache类
static private IWebProxy GetProxy01(string proxy_address, string proxy_login, string proxy_password) {
CredentialCache cache = new CredentialCache();
WebProxy proxy = new WebProxy(proxy_address, true);
cache.Add(proxy.Address, "Basic", new NetworkCredential(proxy_login, proxy_password));
proxy.Credentials = cache;
proxy.UseDefaultCredentials = false;
return proxy;
}
两种方法都使用以下代码进行测试
string proxy_login = "here is login";
string proxy_password = "here is password";
string proxy_address = "here is proxy address";
WebRequest req = WebRequest.Create("http://www.google.com");
req.Proxy = GetProxy00(proxy_address, proxy_login, proxy_password);
WebResponse res = req.GetResponse();
他们都抛出System.Net.WebException: The remote server returned an error: (407) Proxy Authentication Required.
异常。
如何使用 WebProxy 类通过代理使用基本身份验证方法进行身份验证?