python - 在 WSGI 应用程序中获取未转义的 URI

标签 python wsgi werkzeug

我正在根据规范进行编码,其中编码的字符(特别是斜杠)很重要。然而,尽我所能,我无法找到在编码字符解码之前访问 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/

相关文章:

python - 低效代码 : comparing combining different columns from different files awk or perl?

Python 动画时序

python - Django View 可以先返回它的标题吗?

django - 如何在托管在 Heroku 上的 Django 项目中使用 Werkzeug 交互式回溯调试器?

python - Flask python Loop.index 模

python - 从一个数字开始,然后在 for 中减去 x

python - 制作一个 python 图形用户界面

wsgi - 如何找到mod_wsgi.so文件

python - 如何使用单个服务器在多个域上部署多个 WSGI 应用程序?

http - 在 Flask 请求中更改 header 的最佳做法是什么?