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);
3 réponses
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
devrait le faire.
Essayez D'utiliser un Tableau normal
//$data = "{'nom_champ': 'field_value'}";
$data = array ('field_name' = > 'field_value');
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');