我有一个自定义HTTP类用于我正在使用的服务。最终它将以方法的形式包含特定于服务的请求。我需要做的是设置用户提供的代理的凭据,例如,如果用户有代理列表。
以下是我的代码。我已经评论了我需要设置凭据的部分。我查看了MSDN上的iCredentials类,但我看不到如何从字符串中设置它们。
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();
}
}
}
答案 0 :(得分:24)
我认为这应该有效:
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 );
}
答案 1 :(得分:0)
我做了一点修改
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);
}