Je dois faire une demande 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 pourquoi cela ne fonctionne pas? Comment puis-je le réparer?
Edit: Je me connecte à un service Web RESTful. Il renvoie HTTP/1.1 200 pour les demandes 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);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
devrait le faire.
JSON PATCH serait préférable pour le format de données car ce format est conçu pour la demande HTTP PATCH. 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');
Essayez d'utiliser un tableau normal
// $ data = "{'field_name': 'field_value'}";
$ data = array ('field_name' => 'field_value');