Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dev_appserver.py无法发出SSL请求的解决方法_Python_Google App Engine_Ssl_Braintree_Dev Appserver - Fatal编程技术网

Python dev_appserver.py无法发出SSL请求的解决方法

Python dev_appserver.py无法发出SSL请求的解决方法,python,google-app-engine,ssl,braintree,dev-appserver,Python,Google App Engine,Ssl,Braintree,Dev Appserver,尝试从Google App Engine应用程序调用braintree.ClientToken.generate(),在dev_appserver.py上运行Flask时遇到此问题dev_appserver.py当前无法建立传出SSL连接。进行上述braintree调用将产生 ConnectionError:(“连接中止”,错误(13,“权限被拒绝”) 该调用在真实的GAE环境中工作。它在我的一个视图中使用,所以当它失败时,它会以500以上的错误破坏我的整个网站流。如何解决这个问题,以便在本地环

尝试从Google App Engine应用程序调用
braintree.ClientToken.generate()
,在
dev_appserver.py
上运行Flask时遇到此问题
dev_appserver.py
当前无法建立传出SSL连接。进行上述braintree调用将产生

ConnectionError:(“连接中止”,错误(13,“权限被拒绝”)


该调用在真实的GAE环境中工作。它在我的一个视图中使用,所以当它失败时,它会以500以上的错误破坏我的整个网站流。如何解决这个问题,以便在本地环境中继续开发?

如果在
dev_appserver.py
中运行时,应用程序有一些全局变量,则可以根据该变量创建失败方法的模拟

在我的例子中,该变量称为
env_conf.FLASK_conf
。我使用以下代码模拟braintree生成调用

# 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)
一般的想法是:

import problem_function
if DEV_ENVIRONMENT:
    def mock_problem_fcn():
        return 'expected response'
    problem_function = mock_problem_function

problem_function()
我在Braintree工作。如果你有更多的问题,你可以随时回答

有关GAE上Braintree Python库的帮助,请参阅。要回答您的问题,您可以,以便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)

这是另一个问题的答案(我想)。如果我理解正确,这将启用到dev_appserver.py的传入SSL连接,而不是传出SSL连接。我遇到的问题是dev_appserver无法建立传出SSL连接。当我能找到的与我的问题有关的答案都是这个答案时,我感到非常沮丧。当然,我试着什么都没用,散布在互联网上。@brandones,你错了。此修复程序专门用于启用传出SSL连接。不适用于我。我也尝试过几种不同的修复方法。我一直收到相同的错误--
ConnectionError:('Connection aborted',error(13,'Permission denied'))
@brandones如果您发布一个最小的代码示例,其中包含我的答案中仍然存在问题的修复,我很乐意明天看一看,看看是否可以复制。原来我在这段代码上面调用了
import braintree
,所以它没有使用提供的套接字模块<代码>导入braintree需要位于此代码之后。我认为这将是一件好事,因为它肯定不是显而易见的。