Python 我如何在App Engine上使用Django接收百分比编码的斜杠?
我正在使用Django和谷歌的应用程序引擎 我想用百分比编码的斜杠将信息发送到服务器。类似于Python 我如何在App Engine上使用Django接收百分比编码的斜杠?,python,django,google-app-engine,Python,Django,Google App Engine,我正在使用Django和谷歌的应用程序引擎 我想用百分比编码的斜杠将信息发送到服务器。类似于http:/localhost/turtle/waxy%2fsooth的请求,它将与类似r'^/turtle/(?P([A-Za-z]|%2F)+)$”的URL匹配。。请求完整地到达服务器,但在与正则表达式进行比较之前的某个时间,%2F被转换为正斜杠 我可以做些什么来阻止%2Fs被转换成正斜杠?谢谢 os.environ['PATH\u INFO']已解码,因此您将丢失该信息。可能os.environ['
http:/localhost/turtle/waxy%2fsooth
的请求,它将与类似r'^/turtle/(?P([A-Za-z]|%2F)+)$”的URL匹配。
。请求完整地到达服务器,但在与正则表达式进行比较之前的某个时间,%2F被转换为正斜杠
我可以做些什么来阻止%2Fs被转换成正斜杠?谢谢
os.environ['PATH\u INFO']
已解码,因此您将丢失该信息。可能os.environ['REQUEST\u URI']
可用,如果可用,则不会解码。Django只读取路径信息。你可能会这样做:
request_uri = environ['REQUEST_URI']
request_uri = re.sub(r'%2f', '****', request_uri, re.I)
environ['PATH_INFO'] = urllib.unquote(request_uri)
然后%2f的所有情况都被替换为
***
(或任何您想要使用的内容)。为什么不能将regexp更改为使用非编码版本?我们使用的是RESTful设计,并且有其他类似于r'^/turtle/(?p([a-Za-z]|%2f)+/shell$”
的正则表达式。我们想要区分作为URL层次结构一部分的斜杠和作为海龟名称一部分的斜杠。我将把这一点添加到我的需求列表中,我在评估候选Python web框架时使用这些需求。你说它“有时”会被转换-在什么情况下?它说“有时”。我的意思是,在它到达服务器后的某个时刻,但在它与正则表达式进行比较之前,%2F被转换为正斜杠。什么设置请求URI?我在pep 333的必需wsgi变量列表中没有看到它。它在pep 333中不是必需的,但它被广泛地设置为CGI(或类似CGI)请求的一部分。在GAE上,如果它存在,那么它肯定会继续存在。它是完整的请求路径,没有对其进行URL取消编码。os.environ['request_URI']
在GAE上不可用。另一种适用于GData的技术是,您有类似于/{http:%2f%2ffoo}attr/
(当它到达WSGI时看起来像/{http://foo}attr/
),但是因为它使用嵌套的大括号,所以可以解析出块。你也可以设计类似的URL。我认为,除了攻击Django之外,将名称括起来的建议可能是最好的解决方案。谢谢你的帮助,伊恩!