通过代理的 Python Boto S3Connection 问题
Posted
技术标签:
【中文标题】通过代理的 Python Boto S3Connection 问题【英文标题】:Python Boto S3Connection issues through proxy 【发布时间】:2016-03-24 07:13:55 【问题描述】:尝试使用以下代码连接到 AWS S3 并使用代理推送文件并收到以下错误,
代码:
local_proxy = "http://172.18.96.36 local_proxy_port = 8080 aws_connection = S3Connection(aws_access_key_id = AWS_KEY, aws_secret_access_key = AWS_SECRET, is_secure = True, security_token = AWS_TOKEN, proxy = "172.18.96.36", proxy_port = "8080", proxy_user=None, proxy_pass=None)
mybucket = aws_connection.get_bucket(bucket_name, validate = False)
k = boto.s3.key.Key(mybucket) k.set_contents_from_filename(source_file, encrypt_key=True)
错误:需要类似字节的对象,而不是 'str'
当我将代理更改为“http://172.18.96.36”时,出现以下错误,
Errno -2 名称或服务未知
注意:代理工作正常,当我通过 aws cli 尝试时。那里没有问题。此外,boto 脚本在防火墙外也能正常工作。想看看 S3Connection 调用或其他任何地方有什么不正确的地方。
谢谢
【问题讨论】:
【参考方案1】:看看这个。 https://github.com/lcerezo/scriptz/blob/master/SAtools/pushfiles_toS3.py
你想要的是一些类似的东西:
conn = boto.connect_s3(proxy='172.18.96.36',proxy_port='3128',debug=1)
以上对我来说适用于鱿鱼。更改端口。我不认为你想要那个字符串中的http://
。
【讨论】:
谢谢 lcerezo。端口 3128 挂起,没有任何返回。顺便说一句,端口 8080 可以通过 AWS CLI 正常工作。知道为什么我收到错误“需要类似字节的对象,而不是'str'”吗?这会有所帮助。 另外,我正在使用带有常规 boto 模块的 python 3.5。那会是个问题吗?我用 python 2.7 吗? 我认为 ip 不应以 http:// 为前缀,它可能会将其解释为 str()。或者,您可以将 bash env varhttp_proxy
和 https_proxy
设置为 ip:port 例如,export http_proxy=172.18.96.36:8080
另外,当我使用命令行或 os.environ['HTTPS_PROXY'] 变量设置 https_proxy 时,进程挂起
我怀疑它试图 gethostbyname('xxx') 永远不会工作。对于超时,您使用的是 debug=1 吗?以上是关于通过代理的 Python Boto S3Connection 问题的主要内容,如果未能解决你的问题,请参考以下文章