query example enviar datos curl_setopt array php post curl

example - php curl timeout



enrollar el formato POST para CURLOPT_POSTFIELDS (6)

Cuando uso curl mediante POST y configuro CURLOPT_POSTFIELD ¿tengo que urlencode o algún formato especial?

por ejemplo: si quiero publicar 2 campos, primero y último:

first=John&last=Smith

¿Cuál es el código / formato exacto que se debe usar con Curl?

$ch=curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $reply=curl_exec($ch); curl_close($ch);


¡No pases una cuerda en absoluto!

Puedes pasar una matriz y dejar que php / curl haga el trabajo sucio de codificación, etc.


De acuerdo con el manual de PHP, los datos pasados ​​a cURL como una cadena deben ser URLencoded. Consulte la página de curl_setopt() y busque CURLOPT_POSTFIELDS .


En caso de que esté enviando una cadena, urlencode (). De lo contrario, si la matriz, debe ser clave => valor emparejado y el encabezado Content-type se establece automáticamente en multipart/form-data .

Además, no tiene que crear funciones adicionales para construir la consulta para sus matrices, ya tiene eso:

$query = http_build_query($data, '''', ''&'');


Esta respuesta me llevó para siempre para encontrar también. Descubrí que todo lo que tienes que hacer es concatenar la URL (''?'' Después del nombre y la extensión del archivo) con la cadena de consulta codificada en URL. Ni siquiera parece que tengas que configurar las opciones de POST CURRICULUM. Vea el ejemplo falso a continuación:

//create URL $exampleURL = ''http://www.example.com/example.php?''; // create curl resource $ch = curl_init(); // build URL-encoded query string $data = http_build_query( array(''first'' => ''John'', ''last'' => ''Smith'', ''&''); // set url curl_setopt($ch, CURLOPT_URL, $exampleURL . $data); // return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // $output contains the output string $output = curl_exec($ch); // close curl resource to free up system resources <br/> curl_close($ch);

También puede usar file_get_contents() :

// read entire webpage file into a string $output = file_get_contents($exampleURL . $data);


Para CURLOPT_POSTFIELDS , los parámetros se pueden pasar como una cadena urlencoded como para1=val1&para2=val2&.. o como una matriz con el nombre del campo como clave y datos de campo como valor

Pruebe el siguiente formato:

$data = json_encode(array( "first" => "John", "last" => "Smith" )); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $output = curl_exec($ch); curl_close($ch);


EDITAR : desde php5 hacia arriba, se recomienda el uso de http_build_query :

string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )

Ejemplo simple del manual:

<?php $data = array(''foo''=>''bar'', ''baz''=>''boom'', ''cow''=>''milk'', ''php''=>''hypertext processor''); echo http_build_query($data) . "/n"; /* output: foo=bar&baz=boom&cow=milk&php=hypertext+processor */ ?>

antes de php5:

Del manual :

CURLOPT_POSTFIELDS

La información completa para publicar en una operación HTTP "POST". Para publicar un archivo, anteponga un nombre de archivo con @ y use la ruta completa. El tipo de archivo se puede especificar explícitamente siguiendo el nombre del archivo con el tipo en el formato ''; type = mimetype''. Este parámetro se puede pasar como una cadena urlencoded como ''para1 = val1 & para2 = val2 & ...'' o como una matriz con el nombre del campo como clave y datos de campo como valor. Si value es una matriz, el encabezado Content-Type se establecerá en multipart / form-data. A partir de PHP 5.2.0, los archivos que pasan a esta opción con el prefijo @ deben estar en forma de matriz para funcionar.

Entonces algo como esto debería funcionar perfectamente (con parámetros pasados ​​en una matriz asociativa):

function preparePostFields($array) { $params = array(); foreach ($array as $key => $value) { $params[] = $key . ''='' . urlencode($value); } return implode(''&'', $params); }