online - urlencode php
¿Cómo enviar array con CURL? ¿Debo `urlencode`? (5)
Cuando asigno una matriz de datos para ser PUBLICADA como una opción CURRICULA (a través de CURLOPT_POSTFIELDS), ¿necesito urlencode esos datos primero o eso será resuelto?
Los datos POST no se agregan a la URL (como GET) por lo que no es necesario codificar URL.
No tienes que urlencode primero. Sin embargo, es importante tener en cuenta que pasar una matriz hará que cURL lo envíe como datos multipart/form-data
, lo que explica por qué no necesita ser urlencoded (ni usted ni cURL), y necesita usar una matriz si quieres subir archivos Si usted http_build_query()
primero (y lo envía como una cadena) se tratará como application/x-www-form-urlencoded
.
Un problema con el uso de una matriz para CURLOPT_POSTFIELDS es que no puede tener un par nombre-valor con un valor vacío.
La implementación C de curl_setopt
no parece codificar URL el texto. Sin embargo, en PHP5, la función http_build_query
devuelve una representación de cadena de consulta de la matriz que está codificada en URL.
Ejemplo de uso
$curl_parameters = array(
''param1'' => $param1,
''param2'' => $param2
);
$curl_options = array(
CURLOPT_URL => "http://localhost/service",
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( $curl_parameters ),
CURLOPT_HTTP_VERSION => 1.0,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false
);
$curl = curl_init();
curl_setopt_array( $curl, $curl_options );
$result = curl_exec( $curl );
curl_close( $curl );
Yo suelo:
curl_setopt($curl , CURLOPT_POSTFIELDS, $array );
en lugar de:
curl_setopt($curl , CURLOPT_POSTFIELDS, http_build_query($array) );