允许web2py中的%20请求args

时间:2011-09-02 04:18:48

标签: web2py

我正在尝试获取传递URL中编码字符串的请求。例如:

/application/controller/function/hello%20world

这样在我的函数中我可以访问request.args并得到一个我可以取消引用的字符串()。

我尝试修改rewrite.py以不转换%20,但这导致了一些错误。还有一些东西正在寻找我无法找到的地方。我注意到httpserver.log文件有:

127.0.0.1, 2011-09-02 00:12:09, GET, /application/controller/function/hello world, HTTP/1.1, 200, 0.169954

已经转换了空间。也许这给了一个提示。网址在哪里被取消编码?

以下是我的路线文件的内容:

#!/usr/bin/python
# -*- coding: utf-8 -*-

default_application = 'chips'
default_controller = 'default'
default_function = 'index'


routes_onerror = [
   (r'*/404', r'/chips/static/404.html')
   ,(r'*/*',  r'/chips/static/error.html')
]

1 个答案:

答案 0 :(得分:2)

默认情况下,除了'@',' - ','='和'。'之外,web2py不允许使用args中的特殊字符。要覆盖该行为,可以将以下内容添加到routes.py:

routes_apps_raw=['chips']

在这种情况下,request.args将设置为None,您可以通过request.raw_args从URL访问原始参数。但请注意,如果您使用parameter-based rewrite system routes_apps_raw,则routers不起作用(即,如果您的routes.py文件包含unquote()字典)。

注意,即使进行了上述更改,web2py附带的Rocket网络服务器仍然会自动request.raw_args网址,因此您将获得args_match中的特殊字符,但它们已经被解码

如果您使用基于参数的重写系统,则可以通过r'([\w@ -]|(?<=[\w@ -])[.=])*$'键控制URL args中允许的字符,该键将正则表达式作为其值。默认正则表达式为{{1}},允许使用“@”,“ - ”,“=”和“。” (对'='和'。'有一些限制。)