Comment faire une demande de PATCH en PHP en utilisant cURL?

Je dois faire une demande de PATCH en utilisant PHP cURL. Je n'ai trouvé aucune documentation, j'ai donc essayé ce qui suit mais cela ne fonctionne pas.

$data = "{'field_name': 'field_value'}";
$url = "http://webservice.url";
$headers = array('X-HTTP-Method-Override: PATCH');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($curl);
curl_close($curl);

Une idée de pourquoi cela ne fonctionne pas? Comment puis-je résoudre ce problème?

Modifier: Je me connecte à un service Web RESTful. Il renvoie HTTP / 1.1 200 pour les requêtes réussies. Les demandes infructueuses renvoient HTTP / 1.1 403. Je reçois toujours 403.

J'ai essayé de changer $data en:

$data = "data={'field_name': 'field_value'}";

Cela n'a pas changé le résultat.

Edit2: Le code de travail final.

$data = "{'field_name': 'field_value'}";
$url = "http://webservice.url";
$headers = array('Content-Type: application/json');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($curl);
curl_close($curl);
40
demandé sur mattbasta 2013-01-22 08:03:26

3 réponses

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH'); devrait le faire.

70
répondu quickshiftin 2013-01-22 05:57:21

Essayez D'utiliser un Tableau normal

//$data = "{'nom_champ': 'field_value'}";

$data = array ('field_name' = > 'field_value');

1
répondu Shridhar 2013-01-22 05:57:46

Le PATCH JSON serait meilleur pour le format de données car ce format est conçu pour la requête de PATCH HTTP. Voir http://tools.ietf.org/html/rfc6902 pour la spécification. Le tutoriel de Rails 4 montre l'exemple ( http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#http-patch).

// http://tools.ietf.org/html/rfc6902#section-4
$data = '{ "op": "add", "path": "/a/b/c", "value": "foo" }';
$headers = array('Content-Type: application/json-patch+json');
1
répondu masakielastic 2013-05-31 15:34:45