代码之家  ›  专栏  ›  技术社区  ›  Eino Gourdin

尝试访问请求时,“TypeError:必须是str,而不是bytes”。POST字段

  •  1
  • Eino Gourdin  · 技术社区  · 11 年前

    我有一个基于Pyramid框架的Web服务,它接受多部分/表单数据请求。

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

    TypeError:必须是str,而不是字节

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

    不同之处在于,Android库在字段中添加了一些标头,特别是Content Transfer Encoding。从cURL发送的每个值如下:

    --------------------------2008年至2013年

    内容处置:表单数据;name=“smartphoneId”

    2.

    而从Android(带改装):

    --0e0a43a-3156-48ee-a949-931dcc4eb8e

    内容处置:表单数据;name=“smartphoneId”

    内容类型:文本/纯文本;字符集=UTF-8

    内容长度:3

    内容传输编码:8BIT

    999

    最初,内容传输编码是二进制的;我手动将其更改为8BIT,但收到了相同的错误。Python似乎无法解析/处理每个字段的内容。

    知道吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Julien Meyer    9 年前

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

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

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