title: ValueError: Data must not be a string
body: <p>I am trying to do the following with <code>requests</code>:</p>
  
  <pre><code>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')})
  </code></pre>
  
  <p>However, I get the following error: </p>
  
  <pre><code>ValueError: Data must not be a string.
  </code></pre>
  
  <p>Note that if I remove the <code>files</code> parameter, it works as needed. Why won't <code>requests</code> allow me to send a json-encoded string for data if <code>files</code> is included?</p>
  
  <p>Note that if I change <code>data</code> 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.</p>