Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing Credentials To WebProxy?

Tags:

c#

I have a custom HTTP class for the service I am using. Eventually it will contain service specific requests in the form of methods. What I need to do is set the credentials of the proxy provided by the user, for example if the user has a proxy list.

Below is my code. I've commented the part I need to set credentials. I've looked at the iCredentials class on MSDN but I can't see how to set them from a string.

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();
    }
}

}

like image 875
Sian Jakey Ellis Avatar asked Nov 05 '11 13:11

Sian Jakey Ellis


2 Answers

I think this should work:

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 );
}
like image 144
Sklivvz Avatar answered Oct 17 '22 14:10

Sklivvz


I made a little modification

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);
    }
like image 1
Syed Asad Ali Zaidi Avatar answered Oct 17 '22 15:10

Syed Asad Ali Zaidi