Python dev_appserver.py无法发出SSL请求的解决方法
尝试从Google App Engine应用程序调用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以上的错误破坏我的整个网站流。如何解决这个问题,以便在本地环
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需要位于此代码之后。我认为这将是一件好事,因为它肯定不是显而易见的。