【问题标题】:how to make cloudant pick a .pac file?如何让 cloudant 选择一个 .pac 文件?
【发布时间】:2018-06-23 04:16:37
【问题描述】:

在我的 python (2.7) 应用程序中,我使用 Cloudant 数据库,如下所示:

from cloudant.client import Cloudant

client = Cloudant('XXX', 'YYY', account='ZZZ')
client.connect()
my_db = client['my_database']
for doc in my_db: print doc

此应用程序运行的环境使用了无法绕过的proxy.pac。如何让 Cloudant .pac 感知连接,或者如何让 Cloudant 自动查找 proxy.pac?

我找到了 python 包 PyPac (https://pypac.readthedocs.io/en/latest/),但完全不知道如何在 Cloudant 上下文中使用它。

提前感谢您的想法和帮助。

【问题讨论】:

  • 我从直接电子邮件收到的评论:“python-cloudant 不支持 PAC 文件。目前 python-cloudant 中唯一的代理支持是底层请求库提供的。我们不公开一种在每个请求上自定义参数的方法,但是您应该能够配置要通过 HTTPS_PROXY 环境变量使用的代理地址,但这不是我们在 AFAIK 测试过的东西。”
  • “proxy.pac”文件在哪里?
  • 你在开玩笑吗?可以在任何地方。
  • 好的,让我们重试:您知道文件在您的环境中的确切位置吗?我问是因为在尝试使用 pypac 之前你需要知道这一点。
  • 在某些情况下,您会知道其他人不知道的位置。因此 PyPac 提供了自动 pac finder 功能。所以对于这种情况,让我们假设我们知道位置。

标签: python python-2.7 cloudant pac python-cloudant


【解决方案1】:

从 PyPAC 0.6.0 开始,您可以使用 pac_context_for_url 上下文管理器:

from pypac import pac_context_for_url


with pac_context_for_url('https://acct.cloudant.com'):
    # Do your Cloudant stuff

原答案:

这应该可以按预期工作:

import os

import pypac


# PyPAC will auto-discover the current PAC settings
pac = pypac.get_pac()

# Find the proxy for Cloudant (I use this domain but anything else would work too)
proxies = pac.find_proxy_for_url('https://acct.cloudant.com', 'cloudant.com')

# It will return something like: 'PROXY 4.5.6.7:8080; PROXY 7.8.9.10:8080'
# Here we take the 1st one:
proxy = 'http://{}/'.format(proxies.split()[1].rstrip(';'))

# Set proxy envars
os.environ['HTTP_PROXY'] = os.environ['HTTPS_PROXY'] = proxy

# And now try Cloudant stuff

【讨论】:

  • 嗯,有时候生活就是这么轻松! :) 在我看来很好。从来没有想出这个简单但有效的解决方案。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
相关资源
最近更新 更多