首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

解决 Python 3.5 中 requests 库 POST 请求 data 类型错误的方法

在使用Python的requests库发送一个POST请求时,出现了一个TypeError的异常。这个错误提示说"data must be a memoryview, buffer, or byte string",表明data参数不是期望的类型。

这个问题的原因是因为在Python 3.5中,requests库默认使用了新的URL编码方式,这种新的编码方式要求data参数必须是一个内存视图、缓冲区或字节字符串。但是在Python 2.7中,requests库并没有做这个改动,所以会出现这个TypeError。

解决这个问题的方法是显式地告诉requests库使用旧的URL编码方式,方法是在发送请求时设置`encode_chunked=False`参数。例如:

```python

r = requests.post(url, headers=headers, data=data, encode_chunked=False)

```

这样,requests库就会使用旧的URL编码方式,从而避免TypeError的出现。

注意,虽然使用旧的URL编码方式可以解决问题,但是这种编码方式在Python 3.5及以上版本中已经被废弃,所以最好还是使用新的编码方式。可以使用`requests.packages.urllib3.util.urlencode`函数来编码data参数,例如:

```python

import requests.packages.urllib3.util.urlencode as urlencode

data = {'key': 'value'}

r = requests.post(url, headers=headers, data=urlencode(data))

```

这样,requests库就会使用新的URL编码方式,而且可以跨Python版本使用。

希望这篇文章对你解决这个问题有所帮助。如果有任何进一步的问题或需要更多的解释,请随时提出。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O3CuFGn1-WiTDrPzAfNOZuVw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券