我有一个要求...我想从winforms访问一个url(登录页面是web)。我必须将凭据传递给该URL,响应应该是经过身份验证的网页(标记)的跟踪。
我编写了一个函数,它将请求url并返回响应。但我得到错误代码(407)
“需要代理身份验证。”
这是我的代码。
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();
}
答案 0 :(得分:4)
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");
答案 1 :(得分:2)
您可能需要查看System.Net.HttpWebRequest.Proxy on MSDN 这提供了有关如何设置代理身份验证的详细信息。
此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();
答案 2 :(得分:2)
对我而言,它就像告诉它使用DefaultCredentials一样简单(虽然我仍然没有弄清楚为什么它默认不能使用它们):
request.Proxy.Credentials = (System.Net.NetworkCredential)System.Net.CredentialCache.DefaultCredentials;
答案 3 :(得分:0)
您可以先检查是否可以连接到代理。这是一个例子:
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;