错误(407)“需要代理validation”。

我有一个要求…我想从winforms访问一个URL(登录页面是web)。 我必须将凭据传递给该URL,响应应该是经过身份validation的网页(标记)的后果。

我编写了一个函数,它将请求url并返回响应。 但我收到错误代码(407)

“需要代理身份validation。”

这是我的代码。

private static void GetPageContent(){ string url = "https://LoginPage.aspx/"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; // If required by the server, set the credentials. //request.Proxy.Credentials = CredentialCache.DefaultCredentials; request.Credentials = new NetworkCredential("user1", "testuser#"); // Get the response. HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Display the status. Console.WriteLine(response.StatusDescription); // Get the stream containing content returned by the server. Stream dataStream = response.GetResponseStream(); // Open the stream using a StreamReader for easy access. StreamReader reader = new StreamReader(dataStream); // Read the content. string responseFromServer = reader.ReadToEnd(); // Display the content. Console.WriteLine(responseFromServer); // Cleanup the streams and the response. reader.Close(); dataStream.Close(); response.Close(); } 

 WebProxy proxy = new WebProxy(proxyAddress); proxy.Credentials = new NetworkCredential("username", "password", "domain"); proxy.UseDefaultCredentials = true; WebRequest.DefaultWebProxy = proxy; HttpWebRequest request = new HttpWebRequest(); request.Proxy = proxy; 

或者您可以使用WebClient

 WebClient client = new WebClient(); client.Proxy = proxy; string downloadString = client.DownloadString("http://www.google.com"); 

您可能希望在MSDN上查看System.Net.HttpWebRequest.Proxy 。
这提供了如何设置代理身份validation的详细信息。

此SO答案还有一个工作代码示例: https : //stackoverflow.com/a/9603791/204690

例如:

 // Create a new request to the mentioned URL. HttpWebRequest myWebRequest= (HttpWebRequest)WebRequest.Create("http://www.microsoft.com"); // Obtain the 'Proxy' of the Default browser. IWebProxy proxy = myWebRequest.Proxy; if (proxy != null) { // Create a NetworkCredential object and associate it with the // Proxy property of request object. proxy.Credentials=new NetworkCredential(username,password); // or proxy.UseDefaultCredentials = true; // try forcing the proxy to use http (just to the proxy not from proxy to server) UriBuilder proxyAddress = new UriBuilder(proxy.Address); proxyAddress.Scheme = "http"; myWebRequest.Proxy=proxy; } HttpWebResponse myWebResponse=(HttpWebResponse)myWebRequest.GetResponse(); 

对我来说,它就像告诉它使用DefaultCredentials一样简单(尽管我仍然没有弄清楚为什么它默认不能使用它们):

 request.Proxy.Credentials = (System.Net.NetworkCredential)System.Net.CredentialCache.DefaultCredentials; 

您可以先检查是否可以连接到代理。 这是一个例子:

  System.Net.Sockets.Socket sock = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); sock.Connect(url, proxyPort); if (sock.Connected == true) // Port is in use and connection is successful { sock.Close(); return true; } else { sock.Close(); }`enter code here` return false;