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



我正在尝试将Cuttle Proxy与Django一起使用,以限制我们的应用程序对Shopify API的调用。

我已经将 Cuttle 部署到一个盒子上,它正在运行。问题是,我不确定如何指定一个 CACERT 来让 SSL 在 Django 的末端保持快乐。

Cuttle建议您创建这样的证书

openssl req -x509 -nodes -sha1 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825

然后像这样将它与您的 HTTP 客户端一起使用:

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

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

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

我收到以下错误:

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

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

我知道

这并不能直接回答您的问题,但我们最终采用了更简单的路线,即在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 来实现交叉请求令牌桶算法,该算法完美地补充了 Shopify 的泄漏桶算法。您也可以简单地使用sleep(0.5),这也应该可以正常工作。

您需要将其放入一个文件中(我们称之为shopify_limiter.py),将其放在主应用程序的目录中,然后将其导入该应用程序的__init__.py以确保加载。

最新更新