PHP cURL HTTP PUT


74

Ich versuche, eine HTTP-PUT-Anforderung mit cURL zu erstellen, aber ich kann sie nicht zum Laufen bringen. Ich habe viele Tutorials gelesen, aber keines davon hat tatsächlich 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 erzielt. Das Problem ist, dass das Repository angibt, dass keine Metadaten festgelegt wurden. Ich brauche wirklich Hilfe! Vielen Dank!

Antworten:


149

Habe das heute selbst gemacht ... hier ist Code, den ich für mich arbeiten 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


3
Beachten Sie, dass ich versucht habe, curl_setopt($curl, CURLOPT_PUT, true);diesen Code zu verwenden, und er nicht funktioniert hat und daher entfernt werden curl_setopt($curl, CURLOPT_PUT, true);muss.
Nick M

Wie lesen Sie die PUT-Daten? Ich habe alles versucht, aber kein Glück. POST, GET oder REQUEST funktionieren nicht.
andrebruton

5
@andrebruton Ich würde versuchenfile_get_contents('php://input')
Vojtech Kane

16

Wenn Sie mit Postman for Chrome CODE auswählen, erhalten Sie Folgendes ... und es 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\" : \"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;
}

?>


3

In einer POST-Methode können Sie ein Array einfügen. In einer PUT-Methode sollten Sie jedoch http_build_querydie folgenden Parameter erstellen:

curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $postArr ) );

1

Sie haben 2 Standard gemischt.

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

Die Funktion http_build_query($filedata)ist nur für "Inhaltstyp: application / x-www-form-urlencoded" oder keine.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.