错误(407)“需要代理身份验证”
本文关键字:代理 身份验证 错误 | 更新日期: 2023-09-27 17:54:02
我有一个需求,像…我想从一个winforms访问一个url(登录页面是web)。我必须将凭据传递给该url,响应应该是经过身份验证的网页(标记)的内容。
我已经写了一个函数,它将请求url并返回响应。但是我得到错误代码(407)
"Proxy Authentication Required."
这是我的代码。
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。
这提供了如何设置代理身份验证的详细信息。
也有一个工作代码示例在这个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;