2011-11-05 11 views
9

मेरे पास उपयोग की जा रही सेवा के लिए एक कस्टम HTTP कक्षा है। आखिरकार इसमें विधियों के रूप में सेवा विशिष्ट अनुरोध होंगे। मुझे जो करना है वह उपयोगकर्ता द्वारा प्रदान की गई प्रॉक्सी के प्रमाण-पत्र सेट करता है, उदाहरण के लिए यदि उपयोगकर्ता की प्रॉक्सी सूची है।वेबप्रॉक्सी को प्रमाण पत्र पास करना?

नीचे मेरा कोड है। मैंने उस भाग पर टिप्पणी की है जिसे मुझे प्रमाण-पत्र सेट करने की आवश्यकता है। मैंने एमएसडीएन पर 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(); 
    } 
} 

}

उत्तर

16

मुझे लगता है कि यह काम करना चाहिए:

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

मैं सिर्फ इससे पहले कि मैं एक जवाब के लिए ताजा कर NetworkCredential के बारे में पढ़ रहा था। मुझे लगता है कि आप सही हैं, ऐसा करने का यही तरीका है। मैं इसे एक परीक्षा दूंगा। –

संबंधित मुद्दे