Как вы используете прокси HTTP/HTTPS с помощью boto3?
В старой библиотеке boto
было достаточно просто использовать параметры proxy
, proxy_port
, proxy_user
и proxy_pass
при открытии соединения. Однако я не мог найти эквивалентного способа программного определения параметров прокси на boto3.: (
Ответы
Ответ 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