Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError:数据不能是字符串_Python_Python Requests - Fatal编程技术网

Python ValueError:数据不能是字符串

Python ValueError:数据不能是字符串,python,python-requests,Python,Python Requests,我正在尝试对请求执行以下操作: 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

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

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编码字符串


请注意,如果我将
data
更改为普通的python字典(而不是json编码的字符串),则上述方法可以正常工作。因此,问题似乎在于,如果文件不是json编码的,那么数据就不能进行json编码。但是,我需要对数据进行编码,以匹配API创建的哈希签名。

当您将正文指定为JSON字符串时,您不能再附加文件,因为文件上载需要MIME类型
多部分/表单数据

您有两个选择:

  • 将JSON字符串封装为表单数据的一部分(类似于
    JSON=>JSON.dumps(data)
  • 在Base64中对文件进行编码,并在JSON请求体中传输。但这是事实

  • 这个问题的替代解决方案是将数据作为文件发布

  • 您可以将字符串作为文件发布。请在此处阅读更多信息:

  • 下面介绍了如何发布多个文件:


  • 在我的案例中,删除以下内容有助于我:

    'Content-Type': 'application/json'
    

    然后数据应该作为字典传递

    您是否尝试过
    data=data
    ?(没有json编码)是的,但是它会破坏API签名(其他方法都依赖于此)。您需要指定头,以便模块知道它是json字符串。有关详细信息,请参阅。@tyteen4a03--不,不是这样。我已经有了这些标题。这与传递的数据是字符串有关,但传递的文件不是。@David542您现在的头是什么?谢谢,但是当我尝试对图像数据执行json.dumps时,它返回一个
    UnicodeDecodeError
    。是否有人能展示tyteen4a03建议的上述封装示例?将JSON字符串封装为表单数据的一部分(类似于JSON=>JSON.dumps(数据))