Pasar valores de $_POST con cURL

Resuelto Scott Gottreu asked hace 54 años • 6 respuestas

¿ Cómo se pasan $_POSTvalores a una página usando cURL?

Scott Gottreu avatar Jan 01 '70 08:01 Scott Gottreu
Aceptado

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_POSTque activa HTTP POST y CURLOPT_POSTFIELDSque 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.

  1. $dataas an array(): Los datos se enviarán como multipart/form-datalos que no siempre son aceptados por el servidor.

    $data = array('name' => 'Ross', 'php_master' => true);
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
    
  2. $datacomo cadena codificada en URL: los datos se enviarán como application/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 avatar Aug 26 '2008 15:08 Ross

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_RETURNTRANSFERo CURLOPT_HEADER.

Mark Biek avatar Aug 26 '2008 15:08 Mark Biek