2011-11-05 15 views
9

Mam niestandardową klasę HTTP dla usługi, z której korzystam. Ostatecznie będzie zawierał prośby o usługi w postaci metod. Muszę ustawić poświadczenia proxy dostarczone przez użytkownika, na przykład, jeśli użytkownik ma listę proxy.Przekazywanie referencji do WebProxy?

Poniżej znajduje się mój kod. Skomentowałem część, której potrzebuję do ustawienia poświadczeń. Spojrzałem na klasę iCredentials na MSDN, ale nie mogę zobaczyć, jak ustawić je z ciągu.

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

}

Odpowiedz

16

myślę, że to powinno działać:

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); 
} 
+0

Czytałem o NetworkCredential zanim odświeżane na odpowiedź. Myślę, że masz rację, to sposób na zrobienie tego. Dam test. –