peticion - ¿Cómo hago una solicitud PATCH en PHP usando cURL?
curl put php (3)
Intenta usar una matriz normal
// $ data = "{''field_name'': ''field_value''}";
$ data = array (''field_name'' => ''field_value'');
Tengo que hacer una solicitud de PATCH usando PhP cURL. No pude encontrar ninguna documentación, así que intenté lo siguiente, pero no está funcionando.
$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);
¿Alguna idea de por qué esto no está funcionando? ¿Cómo puedo arreglarlo?
Editar: me estoy conectando a un servicio web RESTful. Devuelve HTTP / 1.1 200 para solicitudes exitosas. Las solicitudes no exitosas devuelven HTTP / 1.1 403. Sigo recibiendo 403.
Traté de cambiar $ datos a:
$data = "data={''field_name'': ''field_value''}";
No cambió el resultado.
Edit2: El código de trabajo 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);
JSON PATCH sería mejor para el formato de datos ya que este formato está diseñado para la solicitud HTTP PATCH. Ver http://tools.ietf.org/html/rfc6902 para la especificación. El tutorial de Rails 4 muestra el ejemplo ( 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'');
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, ''PATCH'');
Deberías hacerlo.