3

有一个代理配置为最初使用 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 类通过代理使用基本身份验证方法进行身份验证?

4

0 回答 0