Proxy 如何将HTTP/HTTPS代理与boto3一起使用?

Proxy 如何将HTTP/HTTPS代理与boto3一起使用?,proxy,boto3,Proxy,Boto3,在旧的boto库中,当您打开连接时,它非常简单,可以使用proxy、proxy\u port、proxy\u user和proxy\u pass参数。但是,我找不到任何等效的方法以编程方式在boto3上定义代理参数:(如果用户代理服务器没有密码 请尝试以下操作: import os os.environ["HTTP_PROXY"] = "http://proxy.com:port" os.environ["HTTPS_PROXY"] = "https://proxy.com:port" imp

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

如果用户代理服务器没有密码 请尝试以下操作:

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"
如果您的用户代理服务器具有密码 请尝试以下操作:

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"

除了修改环境变量外,我还将介绍我在代码中发现的内容

由于boto3使用了botocore,我查看了源代码:

通过此链接,我们最终到达:

    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.\u在
EndpointCreator
类中获取代理(最终端点url)
调用

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

get\u environ\u proxies
需要一个包含
{'http:'url'}
(我猜也是
https
)的dict


您可以始终
修补
代码,但这是一种糟糕的做法。

这是我建议使用monkey修补的少数情况之一,至少在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

至少从1.5.79版开始,botocore接受botocore配置中的
代理
参数

e、 g

boto3资源

botocore配置

目前,我必须使用类似以下内容:
import os;os.environ[“HTTP\u PROXY”]=”http://yourproxy.com:1234“os.environ[“HTTPS_PROXY”]=”https://yourproxy1.com:1234"
我在文档中没有发现任何关于这将起作用的内容。例如,在boto上使用
HTTPS\u PROXY
将不起作用,只有
HTTP\u PROXY
。无论如何,在boto3 GitHub存储库中打开了一个问题:似乎开发人员认为设置环境是一个值得替代的(我不这么认为)。他们现在已将此添加为功能请求!尽管确保您正确地在Environ值周围包含引号。此答案在代理开始时丢失了这些引号。这是可行的,但更改环境变量很麻烦。如果您的程序需要向其他服务器执行http请求,则此类请求将被路由通过s3代理服务器,这不是您想要的。您可以通过在完成s3查询后将两个env变量恢复为其原始值来解决这一问题,但我希望有更好的解决方案。我使用boto3==1.4.6,botocore==1.6.6,但这似乎对我不起作用。您能提供一个完整的加载示例吗将一个文件放入一个bucket,或者类似的东西?由于AWS对所有端点都使用HTTPS,请尝试以下配置:
boto3.resource('s3',config=config(proxies={'HTTPS':'foo.bar:3128'}))
(请注意,它是HTTPS)我对STS也有同样的问题。我已经将该配置放入客户机,并且它可以工作,以防其他人需要:
conn=boto3.client('sts',config=config(proxies={'http':'myproxy','https':'myproxy'}))