在Django中指定SSL CACERT以运行Cuttle Proxy

时间:2016-05-24 20:52:36

标签: python django ssl proxy urllib2

我正在尝试使用Django的Cuttle Proxy来限制我们的应用对Shopify API的调用。

我已将Cuttle部署到一个盒子中并且它正在运行。问题是,我不确定如何在Django结束时指定一个CACERT来保持SSL的快乐。

Cuttle建议你创建一个证书

https_proxy='127.0.0.1:3128' curl --cacert cacert.pem https://www.example.com/api/

然后将其与您的http客户端一起使用,如下所示:

HTTPS_PROXY='cuttle.mydomain.com:3128' python manage.py runserver

运行Django时如何执行上述操作?如果我指定HTTPS_PROXY,

<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)>

我收到以下错误:

XML::readHTMLTables

shopify Python API使用pyactiveresource。如果pyactiveresource使用requests库,则可以相当容易地指定它,但它似乎使用urllib.Requests。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我知道这并没有直接回答你的问题,但我们最终选择了shopify模块中更简单的猴子修补ShopifyConnection路径来插入速率限制逻辑。这是基本的脚手架:

from pyactiveresource.activeresource import formats
from pyactiveresource.connection     import Connection, ConnectionError

class RateLimitedShopifyConnection(Connection, object):
    response = None

    def __init__(self, site, user=None, password=None, timeout=None,
                 format=formats.JSONFormat):
        super(ShopifyConnection, self).__init__(
            site, user, password,timeout, format
        )

    def rate_limit(self):
        # Blocking logic here

    def _open(self, *args, **kwargs):
        self.response = None
        try:
            self.rate_limit()
            self.response = super(RateLimitedShopifyConnection, self)._open(
                *args, **kwargs
            )
        except pyactiveresource.connection.ConnectionError as err:
            self.response = err.response
            raise
        return self.response

# Monkey patch
import shopify
shopify.base.ShopifyConnection = RateLimitedShopifyConnection

您可以使用self.site将用户的域名作为唯一标识符。通过我们的设置,我们使用内存数据库Redis来实现交叉请求Token Bucket算法,该算法完美地补充了Shopify的Leaky Bucket算法。你也可以简单地使用sleep(0.5),这也应该可以正常工作。

您希望将其放在一个文件中(我们称之为shopify_limiter.py),将其放在您主应用的目录中并将其导入该应用的{{1}确保它被加载。