【发布时间】:2015-08-26 09:51:24
【问题描述】:
我有这个基于 Pyramid 框架的网络服务,它接受多部分/表单数据请求。
当我从 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"
内容类型:文本/纯文本; charset=UTF-8
内容长度:3
内容传输编码:8BIT
999
最初 Content-Transfer-Encoding 是二进制的;我手动将其更改为 8BIT,但我得到了同样的错误。似乎Python无法解析/处理每个字段的内容。
有什么想法吗?
【问题讨论】:
-
就像错误消息说的那样,您正在接收一个字节字符串,但该函数需要一个本机字符串。如果库尚不兼容 Py3k,则可以使用
str()转换它或恢复为 Python 2。 -
这是 Python 3 吗?使用
decode() 方法将字节对象转换为str。 -
确实是 Python 3;框架应该是兼容的(至少他们说),但也许还有一些错误..
-
这不是pyramid的bug,它只是python3,pyramid完全兼容python3。
-
如果您可以将其复制为一个小测试,或者让我完整转储失败的 HTTP 请求,请填写 WebOb 的错误报告:github.com/pylons/webob/issues 我会看看看看如果这是 WebOb 应该解决的问题。
标签: python pyramid multipartform-data