Форум сайта python.su
Пытаюсь прикрутить платежную систему к сайту. Платежная система отправляет информацию о платежах на конкретный URL моего приложения. Эти запросы вызывают UnicodeDecodeError, по причине того, что параметры POST-запроса содержат не ASCII-символы, а сам запрос закодирован не в Unicode (в моем случае это кириллица закодированная в cp1251).
Воссоздать данную ошибку можно с помощью файла в кодировке cp1251, достаточно открыть его в браузере и нажать кнопку формы. Вместо localhost может быть даже pylonsproject.org, что доказывает, что проблема не только в моем сайте.
<form action="http://localhost:6543/" method="post"> <input type="submit" name="button" value="Привет!"> </form>
UnicodeDecodeError UnicodeDecodeError: 'utf8' codec can't decode byte 0xcf in position 0: invalid continuation byte Traceback (most recent call last) File "env\lib\site-packages\pyramid_debugtoolbar-1.0.2-py2.7.egg\pyramid_debugtoolbar\panels\performance.py", line 69, in noresource_timer_handler result = handler(request) File "env\lib\site-packages\pyramid\tweens.py", line 20, in excview_tween response = handler(request) File "env\lib\site-packages\pyramid_exclog\__init__.py", line 44, in exclog_tween return handler(request) File "env\lib\site-packages\pyramid_tm-0.4-py2.7.egg\pyramid_tm\__init__.py", line 95, in tm_tween response = handler(request) File "env\lib\site-packages\pyramid\router.py", line 78, in handle_request has_listeners and notify(NewRequest(request)) File "env\lib\site-packages\pyramid\registry.py", line 74, in notify [ _ for _ in self.subscribers(events, None) ] File "env\lib\site-packages\zope\interface\registry.py", line 323, in subscribers return self.adapters.subscribers(objects, provided) File "env\lib\site-packages\zope\interface\adapter.py", line 601, in subscribers subscription(*objects) File "my_project\subscribers.py", line 32, in add_localizer localizer = get_localizer(request) File "env\lib\site-packages\pyramid\i18n.py", line 209, in get_localizer current_locale_name = get_locale_name(request) File "env\lib\site-packages\pyramid\i18n.py", line 150, in get_locale_name locale_name = negotiate_locale_name(request) File "env\lib\site-packages\pyramid\i18n.py", line 137, in negotiate_locale_name locale_name = negotiator(request) File "env\lib\site-packages\pyramid\i18n.py", line 123, in default_locale_negotiator locale_name = request.params.get(name) File "env\lib\site-packages\webob\request.py", line 832, in params params = NestedMultiDict(self.GET, self.POST) File "env\lib\site-packages\webob\request.py", line 783, in POST vars = MultiDict.from_fieldstorage(fs) File "env\lib\site-packages\webob\multidict.py", line 78, in from_fieldstorage obj.add(field.name, decode(field.value)) File "env\lib\site-packages\webob\multidict.py", line 72, in <lambda> decode = lambda b: b.decode(charset) File "env\Lib\encodings\utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True)
Офлайн
def request_factory(environ): req = pyramid.request.Request(environ) return req.decode(charset='cp1251') config.set_request_factory(request_factory)
Офлайн
Да, так работает, но перестают корректно работать Unicode запросы, что неудивительно.
На #pyramid ничего не посоветовали, возможно мне не хватило красноречия )
Буду писать в прокуратуру pylons-discuss
Кстати наткнулся на диалог в #pyramid
http://irclogs.rulim.de/%23pyramid/%23pyramid.2012-09-27.log.html
с 06:53 по 07:03
Речь тоже идет про то, должен ли сервер давать ошибку 500 в случае некорректного запроса. Странно но единого мнения на этот счет не сложилось.
Отредактировано Solaris (Сен. 28, 2012 13:46:24)
Офлайн
была, похожая фигня, Крис сказал что это не баг((
Офлайн