我正在根据规范进行编码,其中编码的字符(特别是斜杠)很重要。然而,尽我所能,我无法找到在编码字符解码之前访问 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 或其部分的每一种方式都是这样的。我有什么遗漏的吗?
最佳答案
对于某些 WSGI 服务器,它可以在 WSGI 环境字典中传递的 REQUEST_URI
值中找到。然而,使用它是完全不可靠的,因为它是浏览器发送的原始形式,并且根本没有对其进行任何规范化来清理它。您必须复制 Web 服务器通常会执行的所有规范化操作,这可能很棘手,而且依赖它会使您的代码不可移植,因为只有某些 WSGI 服务器提供它。
一般情况是,在 WSGI 下,并没有真正好的方法来做你想做的事情。如果您想了解更多信息,我建议您深入研究 Python WEB-SIG 邮件列表,其中过去曾对此进行过讨论。
关于python - 在 WSGI 应用程序中获取未转义的 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30981696/