2017-07-18 71 views
0

vmware上的Centos Linux - gsutil正在工作,但我试图使用python代码从谷歌云存储中下载对象。在代理服务器后面运行下面的python代码失败。我尝试导出http_proxy和https_proxy,也通过.boto添加它(尽管我猜测只有gsutil使用它)。但没有任何作品。谷歌云存储客户端库 - 后面的代理 - 访问桶对象使用Python代码?

我在文档中也找不到任何代理设置。

from google.cloud import storage 

storage_client = storage.Client() 
bucket = storage_client.get_bucket('my-bucket') 
blobs=bucket.list_blobs() 

OSERROR:[错误101]网络不可达

* UPDATE 24 JULY-17 - 分辨*

re-installed google cloud storage library and my script works fine with HTTP_PROXY set in the env. Not sure about the root cause for initial troubles and I was not able to reproduce the error again unfortunately.

回答

0

google-cloud python library不具有用于代理的支持。 gsutil的代理支持来自于它对boto库的使用,因此如果您需要代理支持,您可以考虑使用该库。

+0

或者,您可以使用https://github.com/google/apitools并传递用代理初始化的httplib2实例。这是gsutil在使用GCS JSON API时如何与代理协同工作的。代码在这里:https://github.com/GoogleCloudPlatform/gsutil/blob/adf221296d77968b8c7c4bde6dccd235664703ac/gslib/util.py#L786 –

+0

@Mike - 这是不正确的。 python库尊重环境中配置的任何代理设置。请看下面的答案。 – Tuxdude

+0

@Tuxdude - 感谢您的纠正。当我发布这个答案时,我曾看过google-cloud-python源代码,但我没有意识到lib间接支持代理。你能指出我在哪里/如何完成?谢谢。 –

0

尽管google-cloud python library不直接支持代理服务器,但是如果设置了环境变量,它将会承认HTTPS_PROXY环境变量。

或者:

export HTTPS_PROXY=https://mycustomproxy.example.com:12345 
python your_python_script.py 

或者:

export https_proxy=https://mycustomproxy.example.com:12345 
python your_python_script.py 

你也可以(最好在开始的时候)设置此直接在您的Python脚本太:

import os 
os.environ['https_proxy'] = 'https://mycustomproxy.example.com:12345' 

from google.cloud import storage 
storage_client = storage.Client() 
bucket = storage_client.get_bucket('my-bucket') 
blobs=bucket.list_blobs() 

BTW, 在urllib模块中受支持,因此任何库(如google-cloud)使用urllib可以透明地使用请求的代理。

+0

谢谢。我在运行代码之前导出了https_proxy和http_proxy。但是我会尝试从代码中设置它,看看是否有所作为。 – AlwaysConfused

+0

@AlwaysConfused - 如果这不起作用,请共享您用于代理字符串的格式。如果您的代理需要认证,则不得不在代理字符串中包含用户名和密码。对于这种情况,我会建议在代码中动态执行它,以便您的凭证不会直接保存在任何地方。 – Tuxdude

+0

我只是点卸载库并再次运行pip安装,它似乎使用在shell中导出的HTTP_PROXY正常工作!虽然不知道原因,但有点担心 – AlwaysConfused

相关问题