【问题标题】:google cloud storage client library - behind proxy - access bucket objects using python code?谷歌云存储客户端库 - 代理背后 - 使用 python 代码访问存储桶对象?
【发布时间】:2017-12-23 17:11:24
【问题描述】:

vmware 上的 Centos Linux - gsutil 正在工作,但我正在尝试使用 python 代码从谷歌云存储下载对象。在 python 代码下运行失败,因为我在代理服务器后面。我尝试导出 http_proxy 和 https_proxy,也通过 .boto 添加它(虽然我猜只有 gsutil 使用它)。但没有一个有效。

我在文档中也找不到任何关于代理设置的内容。

from google.cloud import storage

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

OSError: [Errno 101] 网络无法访问

*17 年 7 月 24 日更新 - 已解决 *

重新安装了谷歌云存储库,我的脚本工作正常 在环境中设置了 HTTP_PROXY。不确定根本原因 最初的麻烦,我无法再次重现错误 不幸的是。

【问题讨论】:

    标签: python-3.x proxy google-cloud-storage


    【解决方案1】:

    虽然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()
    

    顺便说一句,urllib 模块支持https_proxy,因此任何使用urllib 的库(如此处的google-cloud)都可以透明地使用代理进行请求。

    【讨论】:

    • 谢谢。在运行代码之前,我确实导出了 https_proxy 和 http_proxy。但我会尝试在代码中进行设置,看看是否会有所不同。
    • @AlwaysConfused - 如果这不起作用,请分享您用于代理字符串的格式。如果您的代理需要身份验证,不幸的是,您必须在代理字符串中包含用户名和密码。对于这种情况,我建议在代码中动态执行此操作,以便您的凭据永远不会直接保存在任何地方。
    • 我只是 pip 卸载了库并再次运行 pip install ,使用在 shell 中导出的 HTTP_PROXY 似乎可以正常工作!虽然不知道原因,但有点担心
    【解决方案2】:

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

    【讨论】:

    • 或者,您可以使用 github.com/google/apitools 并传递一个使用代理初始化的 httplib2 实例。这就是 gsutil 在使用 GCS JSON API 时与代理一起工作的方式。代码在这里:github.com/GoogleCloudPlatform/gsutil/blob/…
    • @Mike - 这是不正确的。 python 库尊重环境中配置的任何代理设置。看看我下面的答案。
    • @Tuxdude - 感谢您的更正。当我发布该答案时,我查看了 google-cloud-python 源代码,但我没有意识到 lib 间接支持代理。你能指出我在哪里/如何做到的吗?谢谢。
    • 不幸的是,官方文档非常惨淡。您将在urlopen doc 中看到提到 http_proxy 和 ftp_proxy,但仅此而已。 urllib 的发行说明提到他们添加了对 HTTP/HTTPS 代理的支持,所以这可能有助于追踪我猜的代码。
    猜你喜欢
    • 2017-11-23
    • 2016-03-21
    • 2019-08-24
    • 1970-01-01
    • 2016-01-17
    • 2018-11-04
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多