"TypeError: must be str, not bytes" when trying to access request.POST field

"TypeError: must be str, not bytes" when trying to access request.POST field

我有这个基于 Pyramid 框架的网络服务,它接受 multipart/form-data 请求。

当我从 cURL 发送请求时一切正常; 但是在 Android 应用程序中,它失败并出现以下错误

TypeError: must be str, not bytes

当我尝试访问任何字段时:例如request.POST.get('smartphoneId', None)

区别在于 Android 库向字段添加了一些 headers,特别是 Content-Transfer-Encoding。从 cURL 中,每个值按如下方式发送:

--------------------------5f28b737bc4e4813

Content-Disposition: form-data; name="smartphoneId"

2

而从 Android(经过改造):

--0e0a43aa-3156-48ee-a949-931dcc4eb8be

Content-Disposition: form-data; name="smartphoneId"

Content-Type: text/plain; charset=UTF-8

Content-Length: 3

Content-Transfer-Encoding: 8BIT

999

最初 Content-Transfer-Encoding 是二进制的;我手动将它更改为 8BIT,但我得到了同样的错误。似乎 Python 无法解析/处理每个字段的内容。

有什么想法吗?

我遇到了同样的问题(Python 3.4)。为了解决这个问题,我为以下模块创建了一个补丁 "webob/compat.py" :用 python cgi 3.5 的当前版本替换 multi_read 的现有补丁。现在,它起作用了。我将在 github 存储库上创建一个 pr。

参见https://bugs.python.org/issue27777

我为 webob 创建了一个拉取请求:https://github.com/Pylons/webob/pull/281