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

11 投票
1 回答
2175 浏览
提问于 2025-04-15 23:57

我正在使用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 都会被替换成 ****(或者你想用的其他字符)。

撰写回答