如何在boto3上使用HTTP / HTTPS代理?

时间:2015-11-02 14:38:19

标签: proxy boto3

在旧的boto库中,打开连接时使用proxyproxy_portproxy_userproxy_pass参数非常简单。但是,我找不到在boto3上以编程方式定义代理参数的任何等效方法。 :(

4 个答案:

答案 0 :(得分:13)

至少从版本1.5.79开始,botocore在botocore配置中接受proxies参数。

e.g。

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 config https://botocore.readthedocs.io/en/stable/reference/config.html#botocore.config.Config

答案 1 :(得分:10)

如果您的用户代理服务器没有密码 试着吼叫

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:password@proxy.com:port"
os.environ["HTTPS_PROXY"] = "https://user:password@proxy.com:port"

答案 2 :(得分:1)

除了改变环境变量外,我还会展示我在代码中找到的内容。

由于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)类中的EndpointCreator调用。

长话短说,如果您使用python2,它将使用urllib2中的getproxies方法,如果您使用的是python3,它将使用urllib3。

get_environ_proxies期待包含{'http:' 'url'}的字典(我也猜测https)。

您可以始终patch代码,但这是不好的做法。

答案 3 :(得分:1)

这是我推荐猴子修补的极少数情况之一,至少在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