Воссоздать данную ошибку можно с помощью файла в кодировке cp1251, достаточно открыть его в браузере и нажать кнопку формы. Вместо localhost может быть даже pylonsproject.org, что доказывает, что проблема не только в моем сайте.
<form action="http://localhost:6543/" method="post"> <input type="submit" name="button" value="Привет!"> </form>
Может я что-то не понимаю, но по-моему нормальное приложение не должно выдавать Internal Server Error из-за неправильного запроса. Ошибка на сервере означает проблему в коде, которую нужно исправить.
Возможно кто-то уже сталкивался с подобной проблемой и знает ответы на вопросы:
1. Можно ли как-нибудь обработать такой запрос внутри Pyramid приложения?
2. Как защитить свое приложение от потенциального Traceback-флуда в логах? А у многих Traceback еще и на мыло отправляется.
3. Это все таки проблема Pyramid или WebOb? Не знаю куда постить Issue.
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)