如何使用Python requests发送POST请求调用CarsXE API并解决类型报错
问题解决方案
你遇到的TypeError: a bytes-like object is required, not 'str'报错,核心原因是请求体需要传入字节类型数据,你可以按以下步骤调整代码:
- 优先使用字符串的
encode()方法做字节转换,比手动加b前缀兼容性更强,适配动态生成图片地址的场景 - 可以增加响应内容打印,方便排查接口返回的业务结果
调整后的完整代码如下:
import requests api_key = 12345 # 替换为你实际的CarsXE API密钥 url = f'http://api.carsxe.com/whatcaristhat?key={api_key}' # 字符串转字节,不用手动加b前缀 img_url = 'https://upload.wikimedia.org/wikipedia/commons/4/44/2019_Acura_RDX_A-Spec_front_red_4.2.18.jpg' data = img_url.encode('utf-8') headers = {'Content-Type' : 'text/plain'} r = requests.post(url, data=data, headers=headers) print(r.status_code) # 打印接口返回内容方便调试 print(r.text)
如果你之前写的代码已经给字符串加了b前缀还是报错,大概率是你实际运行的代码中data是动态生成的字符串变量,没有做字节转换,统一用encode()方法处理即可解决。
内容的提问来源于stack exchange,提问作者Bernardo
相关产品推荐
相关产品推荐

