Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何在App Engine上使用Django接收百分比编码的斜杠?_Python_Django_Google App Engine - Fatal编程技术网

Python 我如何在App Engine上使用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['

我正在使用Django和谷歌的应用程序引擎

我想用百分比编码的斜杠将信息发送到服务器。类似于
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之外,将名称括起来的建议可能是最好的解决方案。谢谢你的帮助,伊恩!