通过代理的 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 var http_proxyhttps_proxy 设置为 ip:port 例如,export http_proxy=172.18.96.36:8080 另外,当我使用命令行或 os.environ['HTTPS_PROXY'] 变量设置 https_proxy 时,进程挂起 我怀疑它试图 gethostbyname('xxx') 永远不会工作。对于超时,您使用的是 debug=1 吗?

以上是关于通过代理的 Python Boto S3Connection 问题的主要内容,如果未能解决你的问题,请参考以下文章

AWS S3 通过 boto - 检查磁盘空间

python boto3将IAM角色附加/替换为ec2

如何通过 boto3 解析策略文档响应

Python boto,列出桶中特定目录的内容

使用Python boto3上传Windows EC2实例中的文件至S3存储桶中

python操作s3 -- boto2.x