【问题标题】:How can I emulate an HTTPS request under WebTest?如何在 WebTest 下模拟 HTTPS 请求?
【发布时间】:2012-05-11 16:17:17
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python https pyramid webtest


    【解决方案1】:

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

    testapp.get('/foo', extra_environ={'wsgi.url_scheme': 'https'})
    

    【讨论】:

    • 您能否再描述一下:通常这意味着在“main”而不是“myapp”上调用 get_app。基于其他的测试套件,我基本上有这个: def setUpClass(cls): cls.app = main({}, **settings) def setUp(self): self.app = TestApp(self.app) self.config = testing.setUp() def test__something(self): self.app.get() 我尝试将 wsgi.url_scheme 传递给 extra_environ - 不走运。我可能不得不重构我的应用程序代码来寻找 environ['wsgi.url_scheme'] 而不是 request.scheme
    • "cls.app = main({}, **settings)" 确实加载 INI 文件,因此不包括前缀中间件。这意味着您必须自己完成中间件的工作,并自己设置wsgi.url_scheme environ 参数。如果你想要中间件,你可以手动添加它app = paste.deploy.config.PrefixMiddleware(app),或者你可以加载一个测试ini文件app = pyramid.paster.get_app('testing.ini#main'),它将加载由INI的“main”部分定义的完整wsgi堆栈。
    • settings 之前设置为: settings = appconfig('config:' + os.path.join(here, '../../', 'development.ini')) 我理解get_app 功能现在。要去试试。非常感谢。
    • 根据您的描述,它似乎更像这个命令:self.app = TestApp(pyramid.paster.get_app('development.ini#main')) 我遇到了几个网络测试的问题。如果设置了 wsgi.url_scheme ,我似乎需要修补它以设置“方案”(它目前正在做相反的事情)。在第一次调用 get() 后,它似乎也忽略了指定的标题,但我还没有弄清楚如何/为什么。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-20
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      相关资源
      最近更新 更多