如何在WebTest下模拟HTTPS请求?

时间:2012-05-11 16:17:17

标签: python https pyramid webtest

我有一个金字塔应用程序,可以锁定HTTPS连接的某些功能。

服务器面向nginx(通常),我使用PasteDeploy来检测HTTPS连接。来自我的environment.ini:

[filter:proxy-prefix]
use = egg:PasteDeploy#prefix

如果连接是HTTPS,则粘贴部署会将request.scheme变量设置为'https'

我正在尝试编写一些集成测试,我似乎无法弄清楚如何获取webtest提供的TestApp来处理请求,就像它是HTTPS一样。 / p>

2 个答案:

答案 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。