在python中的Php curl等价物

I have a php curl request which gives me a succesful response. I wanted to covert that in python.

define("uname", "myusername");
define("pwd", "password");
define("turl", "https://mytestapp.com/api/v1/");
$Params = array(
    "subject" => "test subject",
    "contents" => "This is a test case.",
    "requester_id" => "2",
    "channel" => "MAIL",
    "channel_id" => "1" 
);
$json = json_encode($Params);

$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10 );
curl_setopt($ch, CURLOPT_URL, turl);
curl_setopt($ch, CURLOPT_USERPWD, uname.":".pwd);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = curl_exec($ch);
if($output=== FALSE) {
    die(curl_error($ch));
}
curl_close($ch);
print_r(json_decode($output, true))

Tried with pycurl using same options of curl but it ended up with no use, it is giving a bad request error. I am unable to trace what is the error there.

import pycurl
import json
import urllib    
params = [{"subject" : "test subject",
    "contents" : "This is a test case.",
    "requester_id" : "2",
    "channel" : "MAIL",
    "channel_id" : "1"  
           }]

json_to_send = json.dumps(params)
curlClient = pycurl.Curl()
curlClient.setopt(curlClient.FOLLOWLOCATION,True)
curlClient.setopt(curlClient.URL, url)
curlClient.setopt(curlClient.MAXREDIRS, 10)
curlClient.setopt(curlClient.USERPWD,       "myusername:mypassword")
curlClient.setopt(curlClient.SSL_VERIFYPEER, False)
curlClient.setopt(curlClient.POSTFIELDS, json_to_send)
curlClient.setopt(curlClient.CUSTOMREQUEST, "POST")
curlClient.setopt(curlClient.POST, True)
curlClient.setopt(curlClient.FAILONERROR, True)
curlClient.perform()

Is there any better alternate to replicate same in python

Thanks in adavance