proxy - आप boto3 के साथ एक HTTP/HTTPS प्रॉक्सी का उपयोग कैसे करते हैं?




(3)

कम से कम 1.5.79 संस्करण के रूप में, बॉटोकॉको बोटोकोर कॉन्फ़िग में proxies तर्क को स्वीकार करता है।

जैसे

import boto3
from botocore.config import Config

boto3.resource('s3', config=Config(proxies={'http': 'foo.bar:3128'}))

boto3 संसाधन https://boto3.readthedocs.io/en/latest/reference/core/session.html#boto3.session.Session.resource

बोटोकोर कॉन्फ़िगरेशन https://botocore.readthedocs.io/en/stable/reference/config.html#botocore.config.Config

जब आप कोई कनेक्शन खोलते हैं, तो proxy_user proxy_port लाइब्रेरी पर proxy , proxy , proxy और proxy पैरामीटर का उपयोग करने के लिए पर्याप्त सरल था। हालांकि, मैं boto3 पर प्रॉक्सी मापदंडों को परिभाषित करने के प्रोग्राम के किसी भी समान तरीके से नहीं मिल सकता है :(


पर्यावरण चर को बदलने के अलावा, मैं जो कोड में मिला है उसे प्रस्तुत करूंगा।

चूंकि boto3 botocore का उपयोग करता है, मैं स्रोत कोड के माध्यम से एक नज़र था:

https://github.com/boto/botocore/blob/66008c874ebfa9ee7530d944d274480347ac3432/botocore/endpoint.py

इस लिंक से, हम अंत में समाप्त होता है:

    def _get_proxies(self, url):
        # We could also support getting proxies from a config file,
        # but for now proxy support is taken from the environment.
        return get_environ_proxies(url)

... जिसे proxies = self._get_proxies(final_endpoint_url) द्वारा कहा जाता है proxies = self._get_proxies(final_endpoint_url)

छोटी कहानी कम, यदि आप getproxies का उपयोग कर रहे हैं तो यह getproxies से getproxies विधि का उपयोग करेगा और यदि आप अजगर 3 का उपयोग कर रहे हैं, तो यह urllib3 का उपयोग करेगा

get_environ_proxies {'http:' 'url'} युक्त एक get_environ_proxies की अपेक्षा कर रहा है (और मैं https भी अनुमान लगा रहा हूं)।

आप हमेशा कोड patch कर सकते हैं, लेकिन यह खराब अभ्यास है।


यह दुर्लभ अवसरों में से एक है जब मैं बंदर-पैचिंग की सिफारिश करता हूं, कम से कम जब तक कि बीटो डेवलपर्स कनेक्शन-विशिष्ट प्रॉक्सी सेटिंग्स की अनुमति नहीं देते:

import botocore.endpoint
def _get_proxies(self, url):
    return {'http': 'http://someproxy:1234/', 'https': 'https://someproxy:1234/'}
botocore.endpoint.EndpointCreator._get_proxies = _get_proxies
import boto3