আমি yum-3.2.29-81, কার্ল / libcurl 7.19.7-53 দিয়ে CentOS6.x ব্যবহার করছি এবং এই একই সমস্যা আছে। আমার ফায়ারওয়ালের পিছনে yum সার্ভার রয়েছে এবং ssh ব্যবহার করে একটি SOCKS5 প্রক্সি সেটআপের জন্য yum ব্যবহার করতে চাই। আদর্শভাবে, আমি tsocks, প্রক্সিচেইন বা অন্য কোনও "সোক্সিফিকেশন" ইউটিলিটিগুলির প্রয়োজনীয়তা ছাড়াই এটি করতে চাই।
আমি এসওকেএসএস সংযোগটি ব্যবহার করে সেটআপ করছি:
ssh -D 40000 dmz-server
আমি ইয়াম পাইথনের উত্সগুলিতে ঘুরে দেখলাম এবং তারা পাইকারল ব্যবহার করেছে যা libcurl কে আবৃত করে (এছাড়াও দয়া করে নোট করুন যে সমস্ত প্রক্সি এনভায়রনমেন্ট ভেরিয়েবলগুলি - http_proxy, HTTP_PROXY, all_proxy, ALL_PROXY ইত্যাদি ।-- প্রথমে অপরিজ্ঞাত ছিল)। তদুপরি, আমি যাচাই করেছি যে ~ / .curlrc খালি ছিল তাই এটি আমার পরীক্ষার ফলাফলগুলিকে দাগ দেয় না।
আমি মোজা 5 প্রক্সি দিয়ে কথা বলার জন্য কার্ল পেতে পারি কিনা তা দেখতে চেয়েছিলাম:
curl --socks5 127.0.0.1:40000 http://some-server/some-url
রিমোট ওয়েব পৃষ্ঠাটি সাফল্যের সাথে ফিরিয়ে দিয়েছে, তাই এটি একটি ভাল লক্ষণ ছিল - libcurl দেখানো SOCKS5 প্রক্সি ব্যবহার করতে পারে। যাইহোক, একটি পরিবেশের ভেরিয়েবলের সংজ্ঞা দেওয়া হচ্ছে
http_proxy=socks5://127.0.0.1:40000
যথেষ্ট ছিল না:
http_proxy=socks5://127.0.0.1:40000 curl http://some-server/some-url
ব্যর্থ হয়েছে.
এই মুহুর্তে, আমি পাইথন পরীক্ষা প্রোগ্রাম টেস্ট.পি ব্যবহার করে স্যুইচ করেছি :
import pycurl
import sys
sys.stderr.write("Testing %s\n" % pycurl.version)
c = pycurl.Curl()
c.setopt(c.URL, 'http://some-server/some-url')
c.setopt(c.WRITEFUNCTION, sys.stdout.write)
c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
c.perform()
c.close()
এখন, চলছে
./test.py
আনতে ব্যর্থ হবে, তবে চলছে
http_proxy=socks5://127.0.0.1:40000 ./test.py
সফলভাবে http: // কিছু-সার্ভার / কিছু-ইউআরএল আনবে । সুতরাং এটি আমার কাছে মনে হচ্ছে এটি (স্বীকৃতভাবে প্রাচীন) ইয়াম / লিবকরল সংমিশ্রণ যা সেন্টোস 6 এর সাথে জাহাজগুলি লাইবকার্লের মধ্যে প্রক্সি টাইপটিকে সঠিকভাবে সেট করে না। আমি মনে করি কি ঘটছে যে PROXYTYPE পরিবর্তে একটি প্রমিত HTTP প্রক্সি নির্ধারিত লিঙ্ক করা হয় socks5 চিহ্নিতকরণের হয়: // স্কিম URL- এ উল্লেখিত মধ্যে http_proxy এনভায়রনমেন্ট ভেরিয়েবল।
যে কোনও ইভেন্টে, নিম্নলিখিত প্যাচটি /usr/lib/python2.6/site-packages/urlgrabber/grabber.py আমাকে একটি SOCKS5 প্রক্সি মাধ্যমে http: // yum সংগ্রহস্থল অ্যাক্সেস করার অনুমতি দেওয়ার জন্য কাজ করেছে। পাইকার্লফিলঅবজেক্ট # _সেট_অ্যাপ্টসের মধ্যে (স্ব, অপ্টস = {}) যোগ করুন:
if self.scheme == 'http':
proxy = os.getenv('http_proxy') or os.getenv('HTTP_PROXY') or os.getenv('all_proxy') or os.getenv('ALL_PROXY')
if proxy and proxy.find("socks5://") != -1:
self.curl_obj.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
1205 লাইন কাছাকাছি, ঠিক আগে
# ssl options
if self.scheme == 'https':
এই পরিবর্তনের সাথে,
http_proxy=socks5://127.0.0.1:40000 yum install <package_name>
SOCKS5 ssh প্রক্সি মাধ্যমে ফায়ারওয়ালের অপর প্রান্তে আমার সমস্ত http: // yum সংগ্রহস্থলের সাথে সাফল্যের সাথে সংযোগ স্থাপন করেছে।
অবশ্যই, এক এক্সপোর্ট পারে http_proxy একজনের শেল মধ্যে এনভায়রনমেন্ট ভেরিয়েবল প্রতিটি আবাহন আগেই উল্লেখ এড়াতে ইস ।