向WebProxy传递凭据
本文关键字:WebProxy | 更新日期: 2023-09-27 18:13:39
对于我正在使用的服务,我有一个自定义HTTP类。最终,它将以方法的形式包含特定于服务的请求。我需要做的是设置用户提供的代理的凭据,例如,如果用户有一个代理列表。
下面是我的代码。我已经注释了需要设置凭据的部分。我看过MSDN上的icredential类,但我不知道如何从字符串设置它们。
class RequestClass
{
private CookieContainer cookieJar;
private WebProxy proxy = null;
public RequestClass()
{
this.cookieJar = new CookieContainer();
}
public RequestClass(String proxyURL, int port)
{
this.proxy = new WebProxy(proxyURL, port);
}
public RequestClass(String proxyURL, int port, String username, String password)
{
this.proxy = new WebProxy(proxyURL, port);
// Need to set them here
}
// HTTP Get Request
public HttpWebResponse getRequest(String url, NameValueCollection headers)
{
HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(url);
getRequest.Method = "GET";
getRequest.CookieContainer = cookieJar;
foreach (String key in headers.Keys)
{
getRequest.Headers.Add(key, headers[key]);
}
return (HttpWebResponse)getRequest.GetResponse();
}
// HTTP Post Request
public HttpWebResponse postRequest(String url, String postData, NameValueCollection headers)
{
byte[] postBytes = Encoding.ASCII.GetBytes(postData);
HttpWebRequest postRequest = (HttpWebRequest)WebRequest.Create(url);
postRequest.Method = "POST";
postRequest.CookieContainer = cookieJar;
postRequest.ContentLength = postBytes.Length;
postRequest.ProtocolVersion = HttpVersion.Version10;
foreach(String key in headers.Keys)
{
postRequest.Headers.Add(key, headers[key]);
}
Stream postRequestStream = postRequest.GetRequestStream();
postRequestStream.Write(postBytes, 0, postBytes.Length);
postRequestStream.Close();
return (HttpWebResponse)postRequest.GetResponse();
}
}
}
我想这应该行得通:
public RequestClass(String proxyURL, int port, String username, String password)
{
//Validate proxy address
var proxyURI = new Uri(string.Format("{0}:{1}", proxyURL, port));
//Set credentials
ICredentials credentials = new NetworkCredential(username, password);
//Set proxy
this.proxy = = new WebProxy(proxyURI, true, null, credentials );
}
我做了一些修改
public System.Net.IWebProxy RequestClass(String proxyURL, int port, String username, String password)
{
//Validate proxy address
var proxyURI = new Uri(string.Format("{0}:{1}", proxyURL, port));
//Set credentials
ICredentials credentials = new NetworkCredential(username, password);
//Set proxy
return new WebProxy(proxyURI, true, null, credentials);
}
Sklivvz的答案是正确的。但是,我不赞成在Uri
中使用string.Format
。using System;
using System.Net;
public class RequestClass
{
private WebProxy proxy = null;
public RequestClass(string url, int port, string username, string password)
{
// Prepare URL
var urlBuilder = new UriBuilder(url);
urlBuilder.Port = port;
// Setup credentials
var credentials = new NetworkCredential(username, password);
// Setup proxy
this.proxy = new WebProxy(urlBuilder.Uri, true, null, credentials);
}
}