Тело PHP cURL не работает с несколькими массивами - PullRequest
0 голосов
/ 13 сентября 2018

Мне нужно отправить данные через cURL в PHP. Есть мой запрос POST, и он работает с этим примером (я могу опубликовать 1 запись).

 $postData = array(
           "username" => "email@domain.com",
            "name" => "Name",
            "surname" => "Surname",
            'role' => 'user',
            "disabled" => "false"


      );

        $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $this->getCurlUrl());
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
 curl_setopt($ch, CURLOPT_TIMEOUT, 10);
 curl_setopt_array($ch, 
               array(
                   CURLOPT_POST => false,
                   CURLOPT_RETURNTRANSFER => TRUE,
                   CURLOPT_HTTPHEADER => array(
                    'authorization: apikey '.$apikey,
                    'Content-Type: application/rest+json',
                    'pincode: '.$pincode
                                              )
                  // ,CURLOPT_POSTFIELDS => json_encode($postData)
   ));
 curl_setopt($ch, CURLOPT_POSTFIELDS , json_encode($postData));
 $httpCode = curl_getinfo($ch , CURLINFO_HTTP_CODE); // this results 0 every time
 $response = curl_exec($ch);
 if ($response === false) $response = curl_error($ch);
 return stripslashes($response);
 curl_close($ch);

Но я бы хотел добавить записи из базы данных в $postData array, но тогда это остановится.

Это пример массива моей базы данных:

$postData = array();

  foreach ($records = $this->getRecords as $value) {

        $row['username'] = $value['email'];
        $row['name'] = $value['name'];
        $row['surname'] = $value['surname'];
        $row['role'] = 'User';
        $row['disabled'] = $value['status'];

        array_push($postData, $row); 



      }

json массив выглядит ok, но я не могу найти ошибку. Или я не могу опубликовать несколько данных, и мне нужно добавить все в цикле?

1 Ответ

0 голосов
/ 13 сентября 2018

Я нашел несколько недостатков в коде.Вы сказали, что публикуете код, но вы установили

CURLOPT_POST => false

Кроме того, вы повторили

CURLOPT_RETURNTRANSFER => TRUE and CURLOPT_RETURNTRANSFER => 1

Кроме того, ваш API может быть рассчитан на прием одной записи, но вы пытаетесьотправить несколько записей.Если он предназначен для приема 1 записи за раз, вы должны заставить curl вызывать функцию и вызывать ее вместо array_push.например:.curlfunction ($ row);

 function curlfunction($postData){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $this->getCurlUrl());
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POST , 1);
    curl_setopt_array($ch, CURLOPT_HTTPHEADER, array(
                'authorization: apikey '.$apikey,
                'Content-Type: application/rest+json',
                'pincode: '.$pincode
             )

      );
      curl_setopt($ch, CURLOPT_POSTFIELDS , json_encode($postData));
      $httpCode = curl_getinfo($ch , CURLINFO_HTTP_CODE); 
      $response = curl_exec($ch);
      if ($response === false) $response = curl_error($ch);
      curl_close($ch);
      return stripslashes($response);
  }

и

  foreach ($records = $this->getRecords as $value) {

    $row['username'] = $value['email'];
    $row['name'] = $value['name'];
    $row['surname'] = $value['surname'];
    $row['role'] = 'User';
    $row['disabled'] = $value['status'];

    curlfunction($row); 



  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...