【问题标题】:Get Unescaped URI in WSGI Application在 WSGI 应用程序中获取未转义的 URI
【发布时间】:2015-09-08 00:10:57
【问题描述】:

我正在根据规范进行编码,其中编码字符(尤其是斜杠)很重要。但是,尽我所能,在编码字符被解码之前,我找不到访问 URI 的方法。我正在使用 Werkzeug,但如果我运行,则将其缩减为一个简单的示例:

from wsgiref.util import request_uri
from wsgiref.simple_server import make_server

def app(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'text/plain')]
    start_response(status, headers)
    return request_uri(environ)+'\n'

make_server('', 5000, app).serve_forever()

然后:

me@here:~ $ curl "http://localhost:5000/abc%2F123/foo"
http://localhost:5000/abc/123/foo

如您所见,%2F 已经解码为/。我已经深入研究了环境,但我发现访问 URI 或其部分的每一种方式都是这种方式。我有什么遗漏吗?

【问题讨论】:

    标签: python wsgi werkzeug


    【解决方案1】:

    对于某些 WSGI 服务器,它在 WSGI 环境字典中传递的 REQUEST_URI 值中可用。然而,使用它是完全不可靠的,因为它是浏览器发送的原始原始形式,并且根本没有对其进行任何规范化来清理它。您将不得不复制 Web 服务器通常会执行的所有规范化,这可能会很棘手,而且依赖它会使您的代码不可移植,因为只有一些 WSGI 服务器提供它。

    一般情况是,在 WSGI 下并没有真正的好方法来做你想做的事。如果您想了解更多信息,我建议您浏览 Python WEB-SIG 邮件列表,过去曾对此进行过讨论。

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 2014-08-09
      • 2012-05-18
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多