如何在App Engine上使用Django接收百分号编码的斜杠?
我正在使用Django和谷歌的App Engine。
我想把一些信息发送到服务器,里面包含经过百分号编码的斜杠。比如说,像这样的请求 http:/localhost/turtle/waxy%2Fsmooth
,它应该能匹配一个像 r'^/turtle/(?P<type>([A-Za-z]|%2F)+)$'
的网址。这个请求能够完整地到达服务器,但在它和正则表达式进行比较之前,%2F会被转换成普通的斜杠。
我该怎么做才能阻止%2F被转换成斜杠呢?谢谢!
1 个回答
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)
这样的话,所有的 %2f 都会被替换成 ****
(或者你想用的其他字符)。