"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
我有这个基于 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