我正在尝试获取在 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')
]
最佳答案
默认情况下,web2py 不允许在 args 中使用特殊字符,除了 '@'、'-'、'=' 和 '.'。要覆盖该行为,您可以将以下内容添加到 routes.py:
routes_apps_raw=['chips']
在这种情况下, request.args 将被设置为
None
,而您可以通过 request.raw_args
从 URL 访问原始参数。 .但请注意,routes_apps_raw
如果您使用的是 parameter-based rewrite system,则不起作用(即,如果您的 routes.py 文件包含 routers
字典)。请注意,即使进行了上述更改,web2py 中包含的 Rocket Web 服务器仍然会自动
unquote()
URL,因此您将获得 request.raw_args
中的特殊字符,但它们已经被解码了。如果您改用基于参数的重写系统,您可以通过
args_match
控制 URL 参数中允许使用哪些字符。键,它接受一个正则表达式作为它的值。默认正则表达式为 r'([\w@ -]|(?<=[\w@ -])[.=])*$'
, 允许使用“@”、“-”、“=”和“.” (对 '=' 和 '.' 有一些限制)。
关于web2py - 在 web2py 请求参数中允许 %20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7279198/