Разрешить% 20 ​​в аргументах web2py запросов - PullRequest
4 голосов
/ 02 сентября 2011

Я пытаюсь получить запросы на передачу закодированных строк в 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

с уже преобразованным пространством.Может быть, это дает намек.Где URL становится незашифрованным?

Ниже приведено содержимое моего файла маршрутов:

#!/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 Ответ

2 голосов
/ 07 сентября 2011

По умолчанию web2py не допускает использование специальных символов в аргументах, кроме '@', '-', '=' и '.'. Чтобы переопределить это поведение, вы можете добавить следующее к rout.py:

routes_apps_raw=['chips']

В этом случае request.args будет установлен на None, и вместо этого вы можете получить доступ к необработанным аргументам из URL через request.raw_args. Однако обратите внимание, что routes_apps_raw не работает, если вы используете систему перезаписи на основе параметров (т.е., если ваш файл rout.py содержит словарь routers).

Обратите внимание, что даже с учетом вышеуказанных изменений веб-сервер Rocket, включенный в web2py, все равно автоматически unquote() URL-адрес, поэтому вы получите специальные символы в request.raw_args, но они уже будут декодированы.

Если вы вместо этого используете систему перезаписи на основе параметров, вы можете контролировать, какие символы разрешены в аргументах URL, с помощью клавиши args_match, которая принимает регулярное выражение в качестве значения. Регулярное выражение по умолчанию r'([\w@ -]|(?<=[\w@ -])[.=])*$', что позволяет использовать '@', '-', '=' и '.' (с некоторыми ограничениями на '=' и '.').

...