2016-04-22 1 views
0

Я пытаюсь использовать curl с API и отправлять ему значения. Я отправляю параметры в ассоциативном массиве, где все значения представляют собой либо строки, целые числа, либо логические значения, кроме одного значения, которое является другим массивом. (Так что есть массив внутри другого массива.)Как опубликовать массив в массиве с curl

Проблема в следующем: второй массив не отправляется должным образом, и я не могу заставить его работать. Первоначально проблема была «массив для преобразования строк», поэтому я начал использовать http_build_query() вокруг массива params, и он остановил эту проблему, но ее подоконник не работает.

Я знаю, что это, вероятно, проблема с моим кодом, а не с внешним API, поскольку другие разработчики отлично используют API с другими языками.

PHP код:

$url = '{url}'; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
    $headers = array("X-Auth-Token: $json_token"); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    $params = array(
      'name' => 'sample_name', 
      'types' => array('web'), 
      'limit' => 2, 
      'auto' => true 
    ); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); 
    $out = curl_exec($ch); 
    curl_close($ch); 

ответ

1

Ни один из form submission formats поддерживает вложенные (многомерные) массивы. Другими словами, вы не можете отправлять вложенные массивы в запрос POST в виде данных с кодировкой формы (по умолчанию CURL использует формат application/x-www-form-urlencoded). Скорее всего, вы неверно истолковали спецификации API. Возможно, API принимает данные в другом формате, например JSON, который позволяет любой уровень вложенности.

+0

Да! Я изменил тип содержимого и закодировал массив на json, и он сработал! Благодаря! – user5331188

+0

@ user5331188 Вы могли бы поддержать этот ответ, если он решит вашу проблему – hindmost

0

Try это ...

$url = '{url}'; 
$params = array(
     'name' => 'sample_name', 
     'types' => array('web'), 
     'limit' => 2, 
     'auto' => true 
); 
$data_string = json_encode($params);                     

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string))                  
);                             

$out = curl_exec($ch); 
curl_close($ch); 
+0

Просто попробовал, ничего не изменилось. – user5331188

+0

@ user5331188 Я отредактировал ответ, попробуйте это .. –