我对编码字符进行编码,其中编码字符 - 特别是斜线 - 很重要。但是,尽可能地尝试,我无法在解码编码字符之前找到访问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或其中部分内容的方式都是这样的。我有什么遗失的吗?
答案 0 :(得分:1)
对于某些WSGI服务器,它在WSGI环境字典中传递的REQUEST_URI
值中可用。然而,使用它完全不可靠,因为它是由浏览器发送的原始原始格式,并且根本没有对其进行任何标准化以清理它。您必须复制Web服务器通常会执行的所有规范化操作,这可能很棘手,而且依赖它会使您的代码不可移植,因为只有一些WSGI服务器提供它。
一般情况是,在WSGI下,没有一个很好的方法可以做你想要的。如果您想了解更多信息,我建议您深入了解Python WEB-SIG邮件列表,其中过去曾对此进行过讨论。