开发人员的解决方案_应用服务器.py无法发出SSL请求

2024-09-25 10:26:01 发布

您现在位置:Python中文网/ 问答频道 /正文

试图从googleappengine应用程序调用braintree.ClientToken.generate(),在dev_appserver.py上运行Flask时遇到了这个问题。dev_appserver.py当前无法建立传出SSL连接。在树上发出的声音

ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))

这个调用在真实的GAE环境中有效。它被用在我的一个视图中,所以当它失败时,它会破坏我整个网站的流量,错误超过500个。我如何解决这个问题,以便在我的本地环境中继续发展?在


Tags: pydev应用程序声音sslflask环境connection
2条回答

如果在dev_appserver.py中运行时,应用程序有一些全局变量与之对应,则可以创建一个以该变量为条件的失败方法的模拟。在

在我的例子中,这个变量叫做env_conf.FLASK_CONF。我用下面的代码模拟了braintree generate调用。在

# Imports
import braintree
import env_conf
from flask import render_template

# Mock Braintree in DEV environment
if env_conf.FLASK_CONF == 'DEV':
    from functools import partial
    def mock_generate(self):
        return 'foobarbaz123'
    braintree.ClientToken.generate = partial(mock_generate, braintree.ClientToken())

# Add payment handler
def add_payment():
    token = braintree.ClientToken.generate()
    return render_template('add-payment.html',
                           braintree_client_token=token)

一般的想法是:

^{pr2}$

我在Braintree工作。如果您有更多问题,您可以随时contact our support team

有关GAE上的braintreepython库的帮助,请参见this example on my GitHub。要回答您的问题,您可以force the dev server to use the real Python socket library,这样SSL连接可以工作:

try:
    # This is needed to make local development work with SSL.
    # This must be done *before* you import the Braintree Python library.
    # See http://stackoverflow.com/a/24066819/500584
    # and https://code.google.com/p/googleappengine/issues/detail?id=9246 for more information.
    from google.appengine.tools.devappserver2.python import sandbox
    sandbox._WHITE_LIST_C_MODULES += ['_ssl', '_socket']

    import sys
    # this is socket.py copied from a standard python install
    import stdlib_socket
    sys.modules['socket'] = stdlib_socket
except ImportError as e:
    print(e)

相关问题 更多 >