4

I'm trying to upload a zipfile to a Server using Python requests. The upload works fine. However the uploaded file cannot be opened using Windows Explorer or ark. I suppose there's some problem with mime-type or content-Length.

Oddly, uploading the file using curl, does not seem to cause the same problem. Here is my python code for the request:

s = requests.Session()
headers = {'Content-Type': 'application/zip'}    

zip = open('file.zip', 'rb')
files = {'file': ('file.zip', zip, 'application/zip')}             
fc = {'Content-Disposition': 'attachment; filename=file.zip'} 
headers.update(fc)
    
r = requests.Request('POST', url, files=files, headers=headers, auth=(user, password))  

prepared = r.prepare()

resp = s.send(prepared)

This is the curl code, which works flawlessly:

curl -X POST \
    -ik \
    -u user:password \
    --data-binary '@file.zip' \
    -H 'Content-Type: application/zip' \
    -H "Content-Disposition: attachment; filename=file.zip" \
    url

Uploading the file works in both, the Server also seems to recognize the content-type. However the file is rendered invalid when re-downloading. The zifile is readable before sending via requests or after sending with normal curl, using --data-binary. Opening the downloaded zifile with unip or file-roller works either way.

EDIT: I was uploading two files successively. Oddly the error was fixed when uploading the exact same files in reverse order. This has NOT been a python problem. When trying with standard curl I must have accidentally reversed the order, which is why it has been working.

I can not explain this behavior nor do I have a fix for it. In conclusion: Uploading the bigger file first did the trick.

All of the above seems to be applicable in curl, pycurl and python requests, so I assume it's some kind of bug in one of the curl libraries.

muthan
  • 2,342
  • 4
  • 20
  • 32
TheFrozenOne
  • 141
  • 3
  • Possible duplicate of [python requests file upload](https://stackoverflow.com/questions/22567306/python-requests-file-upload) – Maurice Meyer Mar 15 '18 at 11:39
  • 1
    As I said, the upload works. However the file is rendered invalid when re-downloading. The zifile is readable before sending via requests or after sending with normal curl – TheFrozenOne Mar 15 '18 at 11:45

0 Answers0