全局处理来自webob的unicode解码错误

时间:2013-03-28 21:49:50

标签: python unicode wsgi webob

我有一个在WSGI之上编写的大型Web系统,它使用webob访问表单数据(不涉及框架)。随机地,我们将从查询字符串或POST数据中以不可解码的转义序列发送的浏览器(或机器人)获得未处理的UnicodeDecodeError异常。我正在寻找一个好的默认行为,不会让我收到未处理的异常电子邮件。

我的第一个想法是编写一个站点范围的中间件来访问webob请求对象的参数,并使用异常处理程序返回400(或者可以删除不可解码的数据)。

其他系统/框架如何处理这个问题?

1 个答案:

答案 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)