我有一个在WSGI之上编写的大型Web系统,它使用webob访问表单数据(不涉及框架)。随机地,我们将从查询字符串或POST数据中以不可解码的转义序列发送的浏览器(或机器人)获得未处理的UnicodeDecodeError异常。我正在寻找一个好的默认行为,不会让我收到未处理的异常电子邮件。
我的第一个想法是编写一个站点范围的中间件来访问webob请求对象的参数,并使用异常处理程序返回400(或者可以删除不可解码的数据)。
其他系统/框架如何处理这个问题?
答案 0 :(得分:0)
经过一番挖掘后,我发现应该在请求中使用.decode()方法来创建解码请求。如果失败并出现UnicodeDecodeError,我会发回400.例如:
try:
req = webob.Request(environ).decode('ascii')
except UnicodeDecodeError, e:
return webob.Response(status=400, body="""
<h1>Bad Request</h1>
<p>We apologize. Your request includes characters the server
cannot understand. Please click the back button and
check your request for non-standard characters like accent
marks and copy-paste data from word processing
programs.</p>""")(environ, start_response)