在旧的boto
库中,打开连接时使用proxy
,proxy_port
,proxy_user
和proxy_pass
参数非常简单。但是,我找不到在boto3上以编程方式定义代理参数的任何等效方法。 :(
答案 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