我有这个基于Pyramid框架的web服务,它接受多部分/表单数据请求。
当我从cURL发送请求时,一切正常; 然而,从Android应用程序,它失败并出现以下错误
TypeError:必须是str,而不是bytes
当我尝试访问任何字段时:例如request.POST.get('smartphoneId', None)
不同之处在于Android库会在字段中添加一些标题,特别是Content-Transfer-Encoding。从cURL开始,每个值发送如下:
-------------------------- 5f28b737bc4e4813
内容 - 处置:表单数据; NAME = “smartphoneId”
2
而来自Android(改装):
- 0e0a43aa-3156-48ee-a949-931dcc4eb8be
内容 - 处置:表单数据; NAME = “smartphoneId”
Content-Type:text / plain;字符集= UTF-8
内容长度:3
Content-Transfer-Encoding:8BIT
999
最初Content-Transfer-Encoding是二进制的;我手动将其更改为8BIT,但我得到了同样的错误。似乎Python无法解析/处理每个字段的内容。
有什么想法吗?
答案 0 :(得分:1)
我遇到了同样的问题(使用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