Pasar valores de $_POST con cURL
¿ Cómo se pasan $_POST
valores a una página usando cURL
?
Debería funcionar bien.
$data = array('name' => 'Ross', 'php_master' => true);
// You can POST a file by prefixing with an @ (for <input type="file"> fields)
$data['file'] = '@/home/user/world.jpg';
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
curl_exec($handle);
curl_close($handle)
Tenemos dos opciones aquí, CURLOPT_POST
que activa HTTP POST y CURLOPT_POSTFIELDS
que contiene una serie de datos de nuestra publicación para enviar. Esto se puede utilizar para enviar datos al POST
<form>
s.
Es importante tener en cuenta que curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
toma $data en dos formatos y que esto determina cómo se codificarán los datos de la publicación.
$data
as anarray()
: Los datos se enviarán comomultipart/form-data
los que no siempre son aceptados por el servidor.$data = array('name' => 'Ross', 'php_master' => true); curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
$data
como cadena codificada en URL: los datos se enviarán comoapplication/x-www-form-urlencoded
, que es la codificación predeterminada para los datos del formulario html enviados.$data = array('name' => 'Ross', 'php_master' => true); curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));
Espero que esto ayude a otros a ahorrar tiempo.
Ver:
curl_init
curl_setopt
Ross tiene la idea correcta de PUBLICAR el formato habitual de parámetro/valor en una URL.
Recientemente me encontré con una situación en la que necesitaba PUBLICAR algo de XML como tipo de contenido "texto/xml" sin ningún par de parámetros, así que así es como se hace:
$xml = '<?xml version="1.0"?><stuff><child>foo</child><child>bar</child></stuff>';
$httpRequest = curl_init();
curl_setopt($httpRequest, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($httpRequest, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
curl_setopt($httpRequest, CURLOPT_POST, 1);
curl_setopt($httpRequest, CURLOPT_HEADER, 1);
curl_setopt($httpRequest, CURLOPT_URL, $url);
curl_setopt($httpRequest, CURLOPT_POSTFIELDS, $xml);
$returnHeader = curl_exec($httpRequest);
curl_close($httpRequest);
En mi caso, necesitaba analizar algunos valores del encabezado de respuesta HTTP, por lo que no necesariamente es necesario configurar CURLOPT_RETURNTRANSFER
o CURLOPT_HEADER
.