I’ve been facing a few problems trying to convert the following PHP curl queries to Python requests.
Given PHP Code
$cfile = new CURLFile($filePath,$fileType,$filename); $request='{"signers":["abc@xyz.com"],"expire_in_days":10, "display_on_page":"all"}'; $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, array('authorization: Basic Base64encode(client_id:client_secret)')); $post = array('file'=>$cfile,'request' =>$request); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $res = curl_exec($ch)
My version of Python code
request_data = {} request_data['signers'] = ['abc@xyz.com'] request_data['expire_in_days'] = 10 request_data['display_on_page'] = 'all' temp_file_path = 'PdfTest.pdf' files = {'file': open(temp_file_path, 'rb')} headers = {} headers['content-type'] = "multipart/form-data" headers['authorization'] = 'Basic '+auth # auth contains b64 client:secret r = requests.post(url, files=files, data={'request': request_data}, headers=headers)
Considering my request URLs are the same and so is the base 64 value for authorization. The PHP code returns the right response from the server but the Python one strangely says provides a response telling "code":"UNSUPPORTED_MEDIA_TYPE"
Advertisement
Answer
After some more checks, I seemed to figure out the issue was with the following lines, files
needs mandatory filetype
which can be obtained from MimeTypes().guess_type(path)[0]
and the request_data
should have been json.dumps(request_data)
files = {'file': (temp_file_path, open(temp_file_path, 'rb'), filetype)} # .... Other code r = requests.post(url, files=files, data={'request': json.dumps(request_data)}, headers=headers)