如何在App Engine上使用Django接收百分比编码斜杠?

J. *_*ein 11 python django google-app-engine

我正在使用Django和谷歌的App Engine.

我想用百分比编码的斜杠将信息发送到服务器.像http:/localhost/turtle/waxy%2Fsmooth这样的请求会匹配像这样的URL r'^/turtle/(?P<type>([A-Za-z]|%2F)+)$'.请求完整地到达服务器,但在与正则表达式进行比较之前的某个时间,%2F将转换为正斜杠.

我该怎么做才能阻止%2F转换成正斜杠?谢谢!

Ian*_*ing 4

os.environ['PATH_INFO']已解码,因此您会丢失该信息。可能os.environ['REQUEST_URI']是可用的,如果可用,则不会对其进行解码。Django 只读取 PATH_INFO。你可能可以这样做:

request_uri = environ['REQUEST_URI']
request_uri = re.sub(r'%2f', '****', request_uri, re.I)
environ['PATH_INFO'] = urllib.unquote(request_uri)
Run Code Online (Sandbox Code Playgroud)

然后 %2f 的所有情况都将替换为****(或您想要使用的任何内容)。

  • `os.environ['REQUEST_URI']` 在 GAE 上不可用。 (2认同)
  • 另一种适用于 GData 的技术是你有类似 `/{http:%2f%2ffoo}attr/` 的东西(当它到达 WSGI 时看起来像 `/{http://foo}attr/`),但因为它使用嵌套大括号,您可以解析出块。您可以类似地设计您的 URL。 (2认同)