尝试访问request.POST字段时,“TypeError:必须是str,而不是字节”

时间:2015-08-26 09:51:25

标签: python pyramid multipartform-data

我有这个基于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无法解析/处理每个字段的内容。

有什么想法吗?

1 个答案:

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