it-swarm.com.de

PHP cURL HTTP PUT

Ich versuche, eine HTTP-PUT-Anforderung mit cURL zu erstellen, und ich kann es nicht zum Laufen bringen. Ich habe viele Tutorials gelesen, aber keines von ihnen hat wirklich funktioniert. Hier ist mein aktueller Code:

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

Ich habe auch versucht, PHP PEAR zu verwenden, habe aber das gleiche Ergebnis erhalten. Das Problem ist, dass das Repository sagt, dass keine Metadaten festgelegt wurden. Ich brauche wirklich Hilfe! Vielen Dank!

47
user601513

Ich habe das heute selbst gemacht ... hier ist der Code, den ich für mich gearbeitet habe ...

$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

99
Brian

Wenn Sie Postman für Chrome verwenden und CODE auswählen, erhalten Sie Folgendes ... und funktioniert

<?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\" : \"[email protected]\",\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;
}

?>

6
Jordi Serra

In einer POST -Methode können Sie ein Array einfügen. In einer PUT-Methode sollten Sie jedoch http_build_query verwenden, um die Parameter folgendermaßen zu erstellen:

curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $postArr ) );
2
beck bi

Sie haben 2 Standard gemischt.

Der Fehler ist in $header = "Content-Type: multipart/form-data; boundary='123456f'";

Die Funktion http_build_query($filedata) steht nur für "Content-Type: application/x-www-form-urlencoded" oder keine zur Verfügung.