Как отправить массив с CURL? Должен ли я «urlencode» это?

Когда я назначаю массив данных POSTed как параметр cURL (через CURLOPT_POSTFIELDS), мне нужно сначала перенести данные или позаботиться об этом?

C-реализация curl_setopt , похоже, не кодирует URL- curl_setopt . Однако в PHP5 функция http_build_query возвращает строковое представление запроса массива, кодируемого URL.

Пример использования

  $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 ); 

Сначала вам не нужно указывать urlencode. Тем не менее, важно понимать, что передача массива сделает cURL отправлять его как multipart/form-data , что объясняет, почему ему не нужно получать urlencoded (ни вы, ни cURL), и вам нужно использовать массив, если вы хотите загрузить файлы. Если вы http_build_query() и отправляете его как строку, он будет рассматриваться как application/x-www-form-urlencoded .

Одна из проблем с использованием массива для CURLOPT_POSTFIELDS заключается в том, что вы не можете иметь пару имя-значение с пустым значением.

Данные POST не добавляются в URL (например, GET), поэтому вам не нужно указывать URL-адрес.

Я использую:

 curl_setopt($curl , CURLOPT_POSTFIELDS, $array ); 

вместо:

 curl_setopt($curl , CURLOPT_POSTFIELDS, http_build_query($array) );