2017-09-27 6 views
0

Je crée donc un plugin Moodle auth pour notre système interne. Pour la partie du plugin qui synchronise les informations de profil mises à jour vers l'API externe, j'ai besoin de faire une requête PUT.cURL PUT n'envoie pas les données dans le corps

Le problème que je rencontre est qu'une partie de la demande est envoyée à travers, mais alors il s'arrête juste et finalement l'opération de boucle expire.

Mon code pour faire la demande:

$curl = curl_init(); 
$headers = array(); 
curl_setopt($curl, CURLOPT_PUT, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $params); 
array_push($headers, 'Content-Type: application/json'); 
array_push($headers, 'Expect:'); 
array_push($headers, 'Connection: keep-alive'); 

if ($authtoken){ 
array_push($headers, 'Authorization: Bearer '.$authtoken); 
} 

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($curl, CURLOPT_URL, $serverurl.'/'.$functionname); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLINFO_HEADER_OUT, true); 
curl_setopt($curl, CURLOPT_FAILONERROR,true); 
$result = curl_exec($curl); 

if (curl_error($curl)){ 
    curl_close($curl); 
    return false; 
} 

curl_close($curl); 
return $result; 

La plupart de ce code fonctionne comme prévu, comme il est utilisé pour d'autres demandes aussi bien et fonctionne très bien. En particulier pour les requêtes PUT comme celle-ci, elle envoie environ 614 octets sur le total, par exemple 614 sur 2324, selon Fiddler, puis elle s'arrête. Finalement, il expire et je reçois une erreur.

Répondre

0

Donc je l'ai réparé. La solution était de changer cette ligne:

curl_setopt($curl, CURLOPT_PUT, 1); 

à ceci:

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');