C # प्रॉक्सी के माध्यम से कनेक्ट करना


92

मैं एक ऐसे कार्यालय में काम करता हूं जिसके लिए विशिष्ट HTTP प्रॉक्सी के माध्यम से सभी कनेक्शन की आवश्यकता होती है। मुझे वेबसर्वर के कुछ मूल्यों को क्वेरी करने के लिए एक सरल एप्लिकेशन लिखने की आवश्यकता है - यदि कोई प्रॉक्सी नहीं थी तो यह आसान है। मैं C # एप्लिकेशन को प्रॉक्सी-जागरूक कैसे बना सकता हूं? मैं प्रॉक्सी के माध्यम से किसी भी प्रकार का कनेक्शन कैसे बना सकता हूं?

जवाबों:


103

यह आसानी से या तो प्रोग्रामेटिक रूप से, आपके कोड में, या घोषित रूप से web.config या app.config में आसानी से प्राप्त किया जाता है।

आप प्रोग्रामेटिक रूप से ऐसा प्रॉक्सी बना सकते हैं:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("[ultimate destination of your request]");
WebProxy myproxy = new WebProxy("[your proxy address]", [your proxy port number]);
myproxy.BypassProxyOnLocal = false;
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

आप मूल रूप से WebProxyऑब्जेक्ट को requestऑब्जेक्ट की proxyसंपत्ति में असाइन कर रहे हैं। यह requestतब proxyआप परिभाषित का उपयोग करेंगे ।

समान रूप से एक ही चीज़ को प्राप्त करने के लिए, आप निम्न कार्य कर सकते हैं:

<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[your proxy address and port number]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

अपने web.config या app.config के भीतर। यह एक डिफ़ॉल्ट प्रॉक्सी सेट करता है जो सभी http अनुरोधों का उपयोग करेगा। वास्तव में आपको जो हासिल करने की आवश्यकता है, उसके आधार पर आप डिफ़ॉल्टप्रोक्सी / प्रॉक्सी तत्व के कुछ अतिरिक्त गुणों की आवश्यकता हो सकती है या नहीं , इसलिए कृपया उन लोगों के लिए दस्तावेज देखें।


क्रमिक उदाहरण में, आपने बंदरगाह क्यों नहीं बनाया?
स्कूटा

@ संकटा - कोई विशेष कारण नहीं। उस उदाहरण के रूप में यह केवल एक निरीक्षण था, मैं निर्माणकर्ता का उपयोग कर रहा हूं जो कि स्थानीय पते को बायपास करने के लिए URL (एक स्ट्रिंग के रूप में) और एक बूलियन का उपयोग करता है। यदि आपको एक विशिष्ट पोर्ट नंबर की आवश्यकता है, तो ओवरलोडेड कंस्ट्रक्टर का उपयोग करना बेहतर हो सकता है जो URL (एक स्ट्रिंग के रूप में) और पोर्ट नंबर (एक Int32 के रूप में) की अनुमति देता है, फिर BypassProxyOnLocalतुरंत बाद संपत्ति को सही (यदि आवश्यक हो) सेट करें ।
क्रेगटीपी

2
@ संकटा - मैंने इसे स्पष्ट करने के लिए अपनी पोस्ट को संपादित किया है और यह सुनिश्चित करने के लिए कि प्रोग्रामेटिक और घोषणात्मक उदाहरण वास्तव में एक ही काम कर रहे हैं!
क्रेगटीपी

23

यदि आप उपयोग कर रहे हैं WebClient, तो आपके पास एक प्रॉक्सी संपत्ति है जिसका आप उपयोग कर सकते हैं।

जैसा कि अन्य ने उल्लेख किया है, प्रॉक्सी सेटिंग डिटेक्शन / उपयोग को स्वचालित करने के कई तरीके हैं

Web.Config:

<system.net>
   <defaultProxy enabled="true" useDefaultCredentials="true">
     <proxy usesystemdefault="true" bypassonlocal="true" />
   </defaultProxy>
</system.net>

इस आलेख में वर्णित अनुसार WebProxy वर्ग का उपयोग ।


आप प्रॉक्सी सेटिंग्स को सीधे कॉन्फ़िगर (कॉन्फ़िगर या कोड) भी कर सकते हैं और आपका ऐप फिर उन का उपयोग करेगा।

Web.Config:

<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[proxy address]:[proxy port]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

कोड:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url");
WebProxy myproxy = new WebProxy("[proxy address]:[proxy port]", false);
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

7

इस कोड को आज़माएं। किसी भी http अनुरोध करने से पहले इसे कॉल करें। कोड आपके इंटरनेट एक्सप्लोरर सेटिंग्स से प्रॉक्सी का उपयोग करेगा - एक बात हालांकि, मैं उपयोग करता हूं proxy.Credentials = ....क्योंकि मेरा प्रॉक्सी सर्वर एक एनटीएलएम प्रमाणित इंटरनेट एक्सेलेरेशन सर्वर है। यह एक दे दो।

static void setProxy()
{
    WebProxy proxy = (WebProxy)WebProxy.GetDefaultProxy();
    if(proxy.Address != null)
    {
        proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
        WebRequest.DefaultWebProxy = new System.Net.WebProxy(proxy.Address, proxy.BypassProxyOnLocal, proxy.BypassList, proxy.Credentials);
    }
}

3
WebProxy.GetDefaultProxyफ्रेमवर्क 4.5 के बाद से अप्रचलित है और यह विधि निरर्थक है। उपयोग करने से पहले बेहतर सोचें CredentialCache.DefaultNetworkCredentials। यदि आपने क्रेडेंशियल कैश में कुछ डाला है और आपके प्रॉक्सी को ऐसे क्रेडेंशियल्स की आवश्यकता है, तो यह काम करना चाहिए। अन्यथा यह मदद नहीं करेगा।
कैसेंड्राड

6

यदि आप चाहते हैं कि एप्लिकेशन सिस्टम डिफ़ॉल्ट प्रॉक्सी का उपयोग करे, तो इसे अपने Application.exe.config में जोड़ें (जहां Application.exe आपके आवेदन का नाम है):

<system.net>
   <defaultProxy enabled="true" useDefaultCredentials="true">
   <proxy usesystemdefault="true" bypassonlocal="true" />
   </defaultProxy>
</system.net>

अधिक विवरण MSDN आलेख में System.Net पर पाया जा सकता है


नोट: The: <system.net> अनुभाग <कॉन्फ़िगरेशन> अनुभाग या exe.config फ़ाइल के अंदर जाता है। यह प्रॉक्सी सामान एक साधारण कंसोल ऐप में काम कर रहा है जिसे मैंने पकाया है।
जॉन डायर

5

यह वन-लाइनर मेरे लिए काम करता है:

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

CredentialCache.DefaultNetWorkCredentials इंटरनेट एक्सप्लोरर में प्रॉक्सी सेटिंग सेट है।

WebRequest.DefaultWebProxy.Credentials आवेदन में सभी इंटरनेट कनेक्टिविटी के लिए प्रयोग किया जाता है।


1
"क्रेडेंशियलचैड। डीफॉल्टनेटवर्क कॉर्ड्रेड्रेड्स इंटरनेट एक्सप्लोरर में सेट की गई प्रॉक्सी सेटिंग है"। क्या अभी भी यही मामला है? मैं इंटरनेट विकल्प> कनेक्शन> लैन सेटिंग्स में उपयोगकर्ता नाम और पासवर्ड लिखने के लिए कहीं भी नहीं जा सकता।
मैट

डॉक्स से: "क्लाइंट-साइड एप्लिकेशन के लिए, ये आमतौर पर एप्लिकेशन चलाने वाले उपयोगकर्ता के विंडोज क्रेडेंशियल्स (उपयोगकर्ता नाम, पासवर्ड और डोमेन) होते हैं।"
कॉर्ट ग्रोबबेलर

यह उत्तर थोड़ा खराब हो सकता है, लेकिन मुझे पूरा यकीन है कि यह 2015 की खिड़कियों के लिए सच था
कॉर्ट ग्रोबबेला

4

Foole का कोड मेरे लिए पूरी तरह से काम करता है, लेकिन .NET 4.0 में, यह जांचना न भूलें कि क्या प्रॉक्सी NULL है, जिसका अर्थ है कि कोई प्रॉक्सी कॉन्फ़िगर नहीं किया गया है (कॉर्पोरेट वातावरण के बाहर)

तो यहाँ कोड है कि हमारी समस्या हमारे कॉर्पोरेट प्रॉक्सी के साथ हल किया है

WebClient web = new WebClient();
if (web.Proxy != null)
    web.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

3

इस कोड ने मेरे लिए काम किया है:

WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;

0

स्वचालित प्रॉक्सी डिटेक्शन एक प्रक्रिया है जिसके द्वारा वेब प्रॉक्सी सर्वर को सिस्टम द्वारा पहचाना जाता है और क्लाइंट की ओर से अनुरोध भेजने के लिए उपयोग किया जाता है। इस सुविधा को वेब प्रॉक्सी ऑटो-डिस्कवरी (WPAD) के रूप में भी जाना जाता है। जब स्वचालित प्रॉक्सी का पता लगाना सक्षम हो जाता है, तो सिस्टम प्रॉक्सी प्रॉक्सी स्क्रिप्ट का पता लगाने का प्रयास करता है जो अनुरोध के लिए इस्तेमाल की जाने वाली प्रॉक्सी के सेट को वापस करने के लिए जिम्मेदार है।

http://msdn.microsoft.com/en-us/library/fze2ytx2.aspx


4
यह प्रश्न का उत्तर कैसे देता है? ओपी इस जानकारी का उपयोग कैसे कर सकता है?
कुल्लू

0
            var getHtmlWeb = new HtmlWeb() { AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("iso-8859-2") };

            WebProxy myproxy = new WebProxy("127.0.0.1:8888", false);
            NetworkCredential cred = (NetworkCredential)CredentialCache.DefaultCredentials;
            var document = getHtmlWeb.Load("URL", "GET", myproxy, cred);

5
यह आपके समाधान की व्याख्या लिखने के लिए बेहतर है और न केवल पोस्ट कोड। क्या आप किसी ऐसे पाठ को संपादित कर सकते हैं जो पाठक की मदद करेगा?
ब्रायन टॉम्पसेट -

0

मैं ऊपर दिए गए उत्तरों को जोड़ने के लिए एक उदाहरण का उपयोग करने जा रहा हूं।

मैं वेब प्लेटफ़ॉर्म इंस्टालर के माध्यम से पैकेजों को स्थापित करने का प्रयास करते समय प्रॉक्सी मुद्दों में भाग गया

वह भी एक कॉन्फ़िगर फ़ाइल का उपयोग करता है जो WebPlatformInstaller.exe.config है

मैंने इस IIS फोरम में संपादन सुझाव देने की कोशिश की है

<?xml version="1.0" encoding="utf-8" ?>
<configuration>  
  <system.net>    
     <defaultProxy enabled="True" useDefaultCredentials="True"/>      
   </system.net>
</configuration>

तथा

<?xml version="1.0" encoding="utf-8" ?>
<configuration>  
   <system.net>    
     <defaultProxy>      
          <proxy 
               proxyaddress="http://yourproxy.company.com:80" 
               usesystemdefault="True"
               autoDetect="False" />    
     </defaultProxy>  
   </system.net>
</configuration>

इनमें से किसी ने भी काम नहीं किया।

मेरे लिए क्या काम था -

<system.net>    
    <defaultProxy enabled="true" useDefaultCredentials="false">
      <module type="WebPI.Net.AuthenticatedProxy, WebPI.Net, Version=1.0.0.0, Culture=neutral, PublicKeyToken=79a8d77199cbf3bc" />
    </defaultProxy>  
 </system.net>

मॉड्यूल का उपयोग करने के लिए वेब प्लेटफ़ॉर्म इंस्टालर के साथ पंजीकृत होना आवश्यक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.