Skip to content
Advertisement

ValueError: Data must not be a string

I am trying to do the following with requests:

JavaScript

However, I get the following error:

JavaScript

Note that if I remove the files parameter, it works as needed. Why won’t requests allow me to send a json-encoded string for data if files is included?

Note that if I change data to be just the normal python dictionary (and not a json-encoded string), the above works. So it seems that the issue is that if files is not json-encoded, then data cannot be json-encoded. However, I need to have my data encoded to match a hash signature that’s being created by the API.

Advertisement

Answer

When you specify your body to a JSON string, you can no longer attach a file since file uploading requires the MIME type multipart/form-data.

You have two options:

  1. Encapsulate your JSON string as part as the form data (something like json => json.dumps(data))
  2. Encode your file in Base64 and transmit it in the JSON request body. This looks like a lot of work though.
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement