Come inviare array con CURL? Dovrei `urlencode` esso?
Domanda
Quando assegno una matrice di dati per essere pubblicato come opzione Curl (via CURLOPT_POSTFIELDS), ho bisogno di UrlEncode che i dati prima o sarà che essere curato?
Soluzione
L'implementazione in C di curl_setopt
non sembra codifica URL del testo. Tuttavia, in PHP5, il href="http://us2.php.net/http_build_query" rel="noreferrer"> http_build_query
funzione è con codifica URL.
Esempio di utilizzo
$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 );
Altri suggerimenti
Non è necessario UrlEncode prima. Tuttavia, è importante rendersi conto che passare una matrice renderà Curl inviarlo come multipart/form-data
, il che spiega il motivo per cui è non ha bisogno di farsi urlencoded (dal né voi né cURL), ed è necessario utilizzare un array se si desidera caricare File. Se http_build_query()
primo (e inviarlo come una stringa) che sarà trattata come application/x-www-form-urlencoded
.
Un problema con l'utilizzo di una matrice per CURLOPT_POSTFIELDS è che non si può avere una coppia nome-valore con un valore vuoto.
I dati POST non viene aggiunto all'URL (come GET) in modo non c'è bisogno di URLEncode esso.
Io uso:
curl_setopt($curl , CURLOPT_POSTFIELDS, $array );
invece che:
curl_setopt($curl , CURLOPT_POSTFIELDS, http_build_query($array) );