我有一个金字塔应用程序,可以锁定HTTPS连接的某些功能。
服务器面向nginx(通常),我使用PasteDeploy来检测HTTPS连接。来自我的environment.ini:
[filter:proxy-prefix]
use = egg:PasteDeploy#prefix
如果连接是HTTPS,则粘贴部署会将request.scheme
变量设置为'https'
。
我正在尝试编写一些集成测试,我似乎无法弄清楚如何获取webtest提供的TestApp
来处理请求,就像它是HTTPS一样。 / p>
答案 0 :(得分:2)
确保您正在加载包含过滤器的完整WSGI管道。如果不是,则中间件不会翻译标头。通常这意味着在“main”而不是“myapp”上调用get_app
。此外,我建议尝试使用WebTest的extra_environ
选项,因为最终中间件只是设置environ['wsgi.url_scheme']
。
testapp.get('/foo', extra_environ={'wsgi.url_scheme': 'https'})
答案 1 :(得分:0)
我尝试第三次梳理文档,找出基于PasteDeploy的解决方法(也许是正确的解决方案)......
PasteDeploy查找2个标头以设置https连接。我将它们添加到我用来管理cookie会话的头文件中,它起初似乎工作正常。
{
"HTTP_X_FORWARDED_SCHEME" : 'https',
"HTTP_X_FORWARDED_PROTO" : 'https',
}
PasteDeploy有一个if / else链,所以只需要一个......但是提交两个都可以。
尽管似乎没有调用PasteDeploy - 我在应用程序中看到了这些标题/环境项,但未设置https。