Подтвердить что ты не робот

Как вы используете прокси HTTP/HTTPS с помощью boto3?

В старой библиотеке boto было достаточно просто использовать параметры proxy, proxy_port, proxy_user и proxy_pass при открытии соединения. Однако я не мог найти эквивалентного способа программного определения параметров прокси на boto3.: (

4b9b3361

Ответ 1

Начиная как минимум с версии 1.5.79, botocore принимает аргумент proxies в конфигурации botocore.

например,

import boto3
from botocore.config import Config

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

ресурс boto3 https://boto3.readthedocs.io/en/latest/reference/core/session.html#boto3.session.Session.resource

Конфигурация Botocore https://botocore.readthedocs.io/en/stable/reference/config.html#botocore.config.Config

Ответ 2

Если у пользователя прокси-сервера нет пароля попробуйте, как внизу

import os
os.environ["HTTP_PROXY"] = "http://proxy.com:port"
os.environ["HTTPS_PROXY"] = "https://proxy.com:port"

если у пользователя прокси-сервера есть пароль попробуйте, как внизу

import os
os.environ["HTTP_PROXY"] = "http://user:[email protected]:port"
os.environ["HTTPS_PROXY"] = "https://user:[email protected]:port"

Ответ 3

Помимо изменения переменной среды, я представлю то, что нашел в коде.

Поскольку boto3 использует botocore, я просмотрел исходный код:

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

По этой ссылке мы попадаем на:

    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) в классе EndpointCreator.

Короче говоря, если вы используете python2, он будет использовать метод getproxies из urllib2, а если вы используете python3, он будет использовать urllib3.

get_environ_proxies ожидает диктовку, содержащую {'http:' 'url'} (и я предполагаю, https тоже).

Вы всегда можете patch код, но это плохая практика.

Ответ 4

Это один из редких случаев, когда я рекомендовал бы исправление обезьян, по крайней мере, до тех пор, пока разработчики Boto не разрешат настройки прокси-сервера для подключения:

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