curl_setopt 如果我传递一个数组,会出现内部服务器错误

curl_setopt Internal Server Error if I pass an array

我正在尝试调用 Web 服务,它在将 json 对象传递给 curl_setopt($cSession, CURLOPT_POSTFIELDS, $patientJS) 时工作正常,但发送的对象没有正确的结构,我现在传递一个数组,我收到内部服务器错误。如果我打印 curl_error() 它告诉我

Warning: curl_error(): 1044 is not a valid cURL handle resource

    $patient = array('nom' => $_POST['nom'], 
    'prenom' => $_POST['prenom'], 
    'login' => $_POST['email'], 
    'password' => $_POST['password'],
    'datenaissance' => $_POST['datenaissance'],
    'sexe' => $_POST['sexe']);


$patientJS = json_encode($patient);

$cSession = curl_init();

curl_setopt($cSession, CURLOPT_URL, 'http://medicitussrv.herokuapp.com/enrollPatient');
curl_setopt($cSession, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cSession, CURLOPT_POST, 1);
curl_setopt($cSession, CURLOPT_POSTFIELDS, $patientJS);

$result = curl_exec($cSession);

curl_close($cSession);

这行得通,但发送了一个像

这样的对象
{ '{"nom":"Preciado","prenom":"Rodriguez","login":"artur_preciado@hotmail.com","password":"Medicitus1","datenaissance":"2017-09-06","sexe":"homme"}': '' }

传递一个数组:

    $patient = array('nom' => $_POST['nom'], 
    'prenom' => $_POST['prenom'], 
    'login' => $_POST['email'], 
    'password' => $_POST['password'],
    'datenaissance' => $_POST['datenaissance'],
    'sexe' => $_POST['sexe']);


$cSession = curl_init();

curl_setopt($cSession, CURLOPT_URL, 'http://medicitussrv.herokuapp.com/enrollPatient');
curl_setopt($cSession, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cSession, CURLOPT_POST, 1);
curl_setopt($cSession, CURLOPT_POSTFIELDS, $patient);

$result = curl_exec($cSession);

curl_close($cSession);

这 returns 一个内部服务器错误

在 curl 中发送数组时使用 http_build_query 它将创建 url 编码字符串

    $patient = array('nom' => $_POST['nom'], 
    'prenom' => $_POST['prenom'], 
    'login' => $_POST['email'], 
    'password' => $_POST['password'],
    'datenaissance' => $_POST['datenaissance'],
    'sexe' => $_POST['sexe']);


$cSession = curl_init();

curl_setopt($cSession, CURLOPT_URL, 'http://medicitussrv.herokuapp.com/enrollPatient');
curl_setopt($cSession, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cSession, CURLOPT_POST, 1);
curl_setopt($cSession, CURLOPT_POSTFIELDS, http_build_query($patient));