1

我有一个 Pyramid 应用程序,可以将某些功能锁定到 HTTPS 连接。

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

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

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

我现在正在尝试编写一些集成测试,但我似乎无法弄清楚如何让TestAppwebtest 提供的 . 像处理 HTTPS 一样处理请求。

4

2 回答 2

2

确保您正在加载包含过滤器的完整 WSGI 管道。如果不是,则中间件不会翻译标题。通常这意味着调用get_app“main”而不是“myapp”。另外我建议尝试 WebTest 的extra_environ选项,它可能会起作用,因为最终中间件只是设置environ['wsgi.url_scheme'].

testapp.get('/foo', extra_environ={'wsgi.url_scheme': 'https'})
于 2012-05-11T17:12:24.587 回答
0

我第三次尝试梳理文档,并找到了基于 PasteDeploy 的解决方法(也许是正确的解决方案)......

PasteDeploy 寻找 2 个标头来设置 https 连接。我将它们添加到我用来管理 cookie 会话的标题字典中,起初它似乎工作正常。

{
   "HTTP_X_FORWARDED_SCHEME" : 'https',
   "HTTP_X_FORWARDED_PROTO" : 'https',
}

PasteDeploy 有一个 if/else 链,所以只需要一个......但提交两个作品。

虽然 PasteDeploy 似乎没有被调用 - 我在应用程序中看到这些标头/环境项,但未设置 https。

于 2012-05-11T16:38:18.630 回答