title: python requests post file, post a file and data at the same time
body: <p>I am very new to python (and coding in general) so I hope I articulate my issues well enough. I've managed to cobble together an application that connects to the API of one of my companies software.</p>
  
  <p>I've been able to auth, get the token, pass it to other functions to GET and POST to some API functions. I'm working on a new API call that posts a file. I am STUMPED. All the examples I find show only passing the file but I need to pass the file, and data, and an auth header. I have tried so many variations of my code, and nothing has gotten me any closer.</p>
  
  <p>First, this function is what works, but with a different API (groups) for posting a new group. It doesn't include any files.</p>
  
  <pre><code>def apiPost(token):
  if not token == "":
      status.run_set_text('Running API POST Call', 3)
      headers = { 'Content-Type':'application/json', 'Authorization':'Bearer '+str(token) }
      data = {"data":{ 'id':0, 'customerId':33, 'name':'567tuhj', 'description':'sdfgsdfg'}}
      r = requests.post(api_url+"v1.1/groups/", headers=headers, data=json.dumps(data))
      ***other code removed updating status bars***
      return r
  else:
      ***other code removed updating status bars***
  </code></pre>
  
  <p>My dev environment only has access to one customer, but it still requires that I post the customerId to POST. </p>
  
  <p>I've tried hundreds of variations of converting this to posting a file from what I read on the requests site tutorials and some other stackoverflow questions. This posts to the API packageFiles. According to the Swagger page I have access to, it says I need to include the ID and customer ID when uploading the file still.</p>
  
  <pre><code>def apiPost(token):
  if not token == "":
      status.run_set_text('Running API POST Call', 3)
      headers = {'Authorization':'Bearer '+str(token)}
      files = {'file': open('log.txt', 'rb')}
      data = {"data":{ 'id':0, 'customerId':33}}
      r = requests.post(api_url+"v1.1/package_files/"+set_api_pair_value, headers=headers, data=json.dumps(data), file=files)
      ***other code removed updating status bars***
      return r
  else:
       ***other code removed updating status bars***
  </code></pre>