首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Django中指定SSL CACERT以通过Cuttle代理运行

在Django中指定SSL CACERT以通过Cuttle代理运行
EN

Stack Overflow用户
提问于 2016-05-25 04:52:36
回答 1查看 157关注 0票数 0

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

我已经将Cuttle部署到一个机器上,它正在运行。问题是,我不确定如何指定一个CACERT来使Django的SSL满意。

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使用的是requests库,那么可以很容易地指定它,但它似乎使用的是urllib.Requests。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-09-11 09:43:46

我知道这没有直接回答您的问题,但我们最终采用了一种简单得多的方法,即在shopify模块中修补ShopifyConnection,以插入速率限制逻辑。下面是基本的脚手架:

代码语言:javascript
复制
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的Leaky Bucket算法。您也可以简单地使用sleep(0.5),这也应该可以很好地工作。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37423668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档