Skip to content
Advertisement

Converting PHP Curl queries to Python requests

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)
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement