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!

42
demandé sur George Garchagudashvili 2011-02-18 18:59:54

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

90
répondu Brian 2015-01-08 09:41:28

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;
}

?>
5
répondu Jordi Serra 2017-12-06 19:43:04

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 ) );
1
répondu beck bi 2018-03-27 08:18:16

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.

0
répondu Fabian Maximiliano Lucena Gome 2018-08-13 14:12:02