PHP cURL HTTP PUT
j'essaie de créer une requête HTTP PUT avec cURL et je ne peux pas la faire fonctionner. J'ai lu beaucoup de tutoriels mais aucun n'a vraiment fonctionné. Voici mon code actuel:
$filedata = array('metadata' => $rdfxml);
$ch = curl_init($url);
$header = "Content-Type: multipart/form-data; boundary='123456f'";
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($filedata));
$returned = curl_exec($ch);
if (curl_error($ch))
{
print curl_error($ch);
}
else
{
print 'ret: ' .$returned;
}
j'ai aussi essayé D'utiliser PHP PEAR mais j'ai eu le même résultat. Le problème est que le référentiel dit qu'aucune métadonnée n'a été défini. J'ai vraiment besoin d'aide! Merci!
4 réponses
Juste fait moi-même aujourd'hui... voici le code que j'ai de travailler pour moi...
$data = array("a" => $a);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
$response = curl_exec($ch);
if (!$response)
{
return false;
}
src: http://www.lornajane.net/posts/2009/putting-data-fields-with-php-curl
utiliser Postman pour Chrome, sélectionner le CODE vous obtenez ceci... Et fonctionne
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://blablabla.com/comorl",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => "{\n \"customer\" : \"con\",\n \"customerID\" : \"5108\",\n \"customerEmail\" : \"jordi@correo.es\",\n \"Phone\" : \"34600000000\",\n \"Active\" : false,\n \"AudioWelcome\" : \"https://audio.com/welcome-defecto-es.mp3\"\n\n}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"x-api-key: whateveriyouneedinyourheader"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
?>
dans une méthode POST, vous pouvez mettre un tableau. Cependant, dans une méthode, vous devez utiliser http_build_query
pour générer les paramètres comme ceci:
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $postArr ) );
vous avez mélangé 2 standard.
l'erreur est dans $header = "Content-Type: multipart/form-data; boundary='123456f'";
La fonction http_build_query($filedata)
est uniquement pour "Content-Type: application/x-www-form-urlencoded", ou aucun.