সি # প্রক্সি মাধ্যমে সংযুক্ত হচ্ছে


95

আমি একটি অফিসে কাজ করি যার জন্য একটি নির্দিষ্ট http প্রক্সি দিয়ে সমস্ত সংযোগ তৈরি করা দরকার। ওয়েবসভার থেকে কিছু মান জিজ্ঞাসা করার জন্য আমাকে একটি সাধারণ অ্যাপ্লিকেশন লিখতে হবে - কোনও প্রক্সি না থাকলে এটি সহজ। আমি কীভাবে সি # অ্যাপ্লিকেশনকে প্রক্সি-সচেতন করতে পারি? আমি প্রক্সি দিয়ে কীভাবে কোনও সংযোগ স্থাপন করতে পারি?

উত্তর:


106

এটি আপনার কোডগুলিতে প্রোগ্রামের ভিত্তিতে বা ঘোষিতভাবে ওয়েবকনফিগ বা অ্যাপকনফাইগের মধ্যে সহজেই অর্জন করা যায়।

আপনি প্রোগ্রামগতভাবে এর মতো একটি প্রক্সি তৈরি করতে পারেন:

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>

আপনার ওয়েবকনফিগ বা অ্যাপকনফাইগের মধ্যে। এটি একটি ডিফল্ট প্রক্সি সেট করে যা সমস্ত http অনুরোধগুলি ব্যবহার করবে। আপনার ঠিক কী অর্জন করতে হবে তার উপর নির্ভর করে আপনার ডিফল্টপ্রক্সি / প্রক্সি উপাদানটির অতিরিক্ত কিছু বৈশিষ্ট্য বা প্রয়োজন থাকতে পারে না , তাই দয়া করে তাদের জন্য ডকুমেন্টেশন দেখুন ation


অগ্রগতিমূলক উদাহরণে, আপনি বন্দরটি সেট করেন নি, কেন?
স্কুটা

@ স্কুটা - কোন বিশেষ কারণ নেই। এটি নিছক উদাহরণ হিসাবে যেমন একটি তদারকি ছিল, আমি কনস্ট্রাক্টর ব্যবহার করছি যা ইউআরএল নেয় (একটি স্ট্রিং হিসাবে) এবং স্থানীয় ঠিকানাগুলি বাইপাস করা হয় কিনা তা নির্ধারণের জন্য একটি বুলিয়ান। আপনার যদি কোনও নির্দিষ্ট পোর্ট নম্বর প্রয়োজন হয় তবে ওভারলোড হওয়া কনস্ট্রাক্টর ব্যবহার করা আরও ভাল যা URL টি (স্ট্রিং হিসাবে) এবং পোর্ট নম্বরটিকে (একটি ইন্টার 32 হিসাবে) মঞ্জুরি দেয়, তারপরে তত্ক্ষণাত BypassProxyOnLocalসম্পত্তিটিকে সত্য (যদি প্রয়োজন হয়) সেট করে ।
ক্রেগটিটিপি

4
@ স্কুটা - আমি এটিকে স্পষ্ট করতে এবং প্রোগ্রামেটিক এবং ঘোষণামূলক উদাহরণগুলি বাস্তবে একই কাজ করছে কিনা তা নিশ্চিত করার জন্য আমি আমার পোস্টটি সম্পাদনা করেছি!
ক্রেগটিটিপি

23

আপনি যদি ব্যবহার করেন WebClientতবে এর একটি প্রক্সি সম্পত্তি রয়েছে যা আপনি ব্যবহার করতে পারেন।

অন্যরা যেমন উল্লেখ করেছে, প্রক্সি সেটিং সনাক্তকরণ / ব্যবহার স্বয়ংক্রিয় করার বিভিন্ন উপায় রয়েছে

ওয়েব.কনফিগ:

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

এই নিবন্ধে বর্ণিত হিসাবে ওয়েবপ্রক্সি শ্রেণীর ব্যবহার ।


আপনি প্রক্সি সেটিংস সরাসরি (কনফিগার বা কোড) কোডিংও করতে পারেন এবং আপনার অ্যাপ্লিকেশন সেগুলি তখন ব্যবহার করবে।

ওয়েব.কনফিগ:

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

4
WebProxy.GetDefaultProxyফ্রেমওয়ার্ক ৪.৫ থেকে অপ্রচলিত এবং এই পদ্ধতিটি বাতিল হয়ে যায়। ব্যবহার করার আগে আরও ভাল চিন্তা করুন CredentialCache.DefaultNetworkCredentials। আপনি যদি ক্রেডেনশিয়াল ক্যাশে কিছু রেখেছিলেন এবং আপনার প্রক্সিতে এই জাতীয় শংসাপত্রের প্রয়োজন হয়, তবে এটি কাজ করা উচিত। অন্যথায় এটি সাহায্য করবে না।
cassandrad

6

আপনি যদি অ্যাপ্লিকেশনটিকে সিস্টেম ডিফল্ট প্রক্সি ব্যবহার করতে চান তবে এটি আপনার অ্যাপ্লিকেশন.এক্সে.কনফিগটিতে যুক্ত করুন (যেখানে অ্যাপ্লিকেশন.এক্সই আপনার অ্যাপ্লিকেশনটির নাম):

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

আরও বিশদটি System.Net এর এমএসডিএন নিবন্ধে পাওয়া যাবে


দ্রষ্টব্য: <system.net> বিভাগটি <কনফিগারেশন> বিভাগ বা exe.config ফাইলের মধ্যে চলে। এটি আমি রান্না করেছি এমন একটি সাধারণ কনসোল অ্যাপে কাজ করে প্রক্সি স্টাফ।
জন ডায়ার

5

এই ওয়ান-লাইনারটি আমার পক্ষে কাজ করে:

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

CredentialCache.DefaultNetWorkCredentials ইন্টারনেট এক্সপ্লোরারে সেট করা প্রক্সি সেটিংস।

WebRequest.DefaultWebProxy.Credentials অ্যাপ্লিকেশনটিতে সমস্ত ইন্টারনেট সংযোগের জন্য ব্যবহৃত হয়।


4
"ক্রেডেনসিয়াল ক্যাশে.ডাফল্ট নেট ওয়ার্ক ক্রেডেনটিভালস হ'ল ইন্টারনেট এক্সপ্লোরারে সেট করা প্রক্সি সেটিংস"। এটা কি এখনও আছে? আমি ব্যবহারকারীর নাম এবং পাসওয়ার্ড লিখতে ইন্টারনেট বিকল্পগুলি> সংযোগগুলি> ল্যান সেটিংসে কোথাও খুঁজে পাচ্ছি না।
ম্যাট

দস্তাবেজগুলি থেকে: "ক্লায়েন্ট-সাইড অ্যাপ্লিকেশনের জন্য, এগুলি সাধারণত অ্যাপ্লিকেশনটি চালিত ব্যবহারকারীর উইন্ডোজ শংসাপত্র (ব্যবহারকারীর নাম, পাসওয়ার্ড এবং ডোমেন) হয়।"
কোয়ার্ট গ্রোবেলার

এই উত্তরটি কিছুটা দুর্বল হয়ে থাকতে পারে, তবে আমি নিশ্চিত যে এটি 2015 এর উইন্ডোগুলির জন্য সত্য ছিল
কোয়ার্ট গ্রোবেলেলার

4

ফুলির কোডটি আমার জন্য নিখুঁতভাবে কাজ করেছিল, কিন্তু নেট 4.0, প্রক্সি নুল কিনা তা পরীক্ষা করতে ভুলবেন না, যার অর্থ কোনও প্রক্সি কনফিগার করা হয়নি (কর্পোরেট পরিবেশের বাইরে)

সুতরাং এখানে কোডটি যা আমাদের কর্পোরেট প্রক্সি দিয়ে আমার সমস্যার সমাধান করেছে

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

স্বয়ংক্রিয় প্রক্সি সনাক্তকরণ একটি প্রক্রিয়া যার মাধ্যমে একটি ওয়েব প্রক্সি সার্ভার সিস্টেম দ্বারা সনাক্ত করা হয় এবং ক্লায়েন্টের পক্ষে অনুরোধ প্রেরণ করতে ব্যবহৃত হয়। এই বৈশিষ্ট্যটি ওয়েব প্রক্সি অটো-আবিষ্কার (ডাব্লুপিএডি) নামেও পরিচিত। স্বয়ংক্রিয় প্রক্সি সনাক্তকরণ সক্ষম করা থাকলে, সিস্টেমটি একটি প্রক্সি কনফিগারেশন স্ক্রিপ্ট সনাক্ত করার চেষ্টা করে যা অনুরোধের জন্য ব্যবহার করা যেতে পারে এমন প্রক্সিগুলির সেটটি ফেরত দেওয়ার জন্য দায়ী।

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


4
কিভাবে এই প্রশ্নের উত্তর দেয়? ওপি কীভাবে এই তথ্য ব্যবহার করতে পারে?
Culub

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

4
কেবলমাত্র পোস্ট কোড নয়, আপনার সমাধানের ব্যাখ্যা লিখাই ভাল। আপনি কি এমন কিছু পাঠ্য সম্পাদনা করতে পারবেন যা পাঠককে সহায়তা করবে?
ব্রায়ান টম্পসেট - :

0

আমি উপরের উত্তরগুলি যুক্ত করতে একটি উদাহরণ ব্যবহার করতে যাচ্ছি।

ওয়েব প্ল্যাটফর্ম ইনস্টলার এর মাধ্যমে প্যাকেজ ইনস্টল করার চেষ্টা করার সময় আমি প্রক্সি সমস্যার মধ্যে পড়েছিলাম

এটিও একটি কনফিগার ফাইল ব্যবহার করে যা ওয়েবপ্ল্যাটফর্মআইনস্টলআরেক্সএকনফিগ

আমি চেষ্টা সম্পাদনাগুলি মধ্যে সুপারিশ এই আইআইএস ফোরাম যা

<?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>

মডিউলটি এটি ব্যবহার করার জন্য ওয়েব প্ল্যাটফর্ম ইনস্টলারের সাথে নিবন্ধিত করা দরকার।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.