python中valueerror是什么意思_python-ValueError:数据不得为字符串

我正在尝试对请求执行以下操作:

data = {'hello', 'goodbye'}

json_data = json.dumps(data)

headers = {

'Access-Key': self.api_key,

'Access-Signature': signature,

'Access-Nonce': nonce,

'Content-Type': 'application/json',

'Accept': 'text/plain'

}

r = requests.post(url, headers=headers, data=json_data,

files={'file': open('/Users/david/Desktop/a.png', 'rb')})

但是,出现以下错误:

ValueError: Data must not be a string.

请注意,如果我删除files参数,它会根据需要工作.如果包含文件,为什么请求不能让我发送json编码的数据字符串?

请注意,如果我将数据更改为普通的python字典(而不是json编码的字符串),则上述方法有效.因此,问题似乎在于,如果文件未经过json编码,则数据无法进行json编码.但是,我需要对我的数据进行编码以匹配由API创建的哈希签名.

解决方法:

当您将主体指定为JSON字符串时,您将无法再附加文件,因为文件上传需要MIME类型multipart / form-data.

您有两种选择:

>将您的JSON字符串封装为表单数据(类似于json => json.dumps(data))

>在Base64中对文件进行编码,然后在JSON请求正文中进行传输.虽然是looks like a lot of work.

标签:python-requests,python

来源: https://codeday.me/bug/20191120/2047807.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值