Опубликовать данные json с помощью php cURL

Я пытаюсь опубликовать некоторые данные с помощью JSON в API. Этот API сгенерирует токен, который мне понадобится позже для других запросов к этому API.

Это мой код.

$data = array("grant_type" => "password", "client_id" => "454665", "client_secret" => "6544465645", "username" => "[email protected]", "password" => "5454644", "refresh_token" => "648654");
$data_string = json_encode($data);  
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) //<- i was missing this line
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
     //'Content-Length: ' . strlen($data_string))
)); 

$result = curl_exec($ch);

echo json_decode($result);

Проблема в том, что echo json_decode($result); возвращает пустую страницу, без ответа.

Я протестировал API в почтальоне, и он возвращает мне токен. Я думаю, что мне просто чего-то не хватает, чтобы правильно отображать данные.

Вы никогда не определяете $data_string. Попробуйте: $data_string = json_encode($data);

Sammitch 14.03.2019 18:09

Зачем сталкиваться с проблемой использования завитка? Вместо этого я предлагаю использовать Guzzle, который представляет собой оболочку curl, но с более простыми функциями интерфейса.

Mazzy 14.03.2019 18:13

@Sammitch, спасибо, я забыл. Но json_decode($result) продолжает возвращать пустую страницу.

Adriano Chaves 14.03.2019 18:22

@Mazzy, я посмотрю на это, спасибо.

Adriano Chaves 14.03.2019 18:22

Выполнение следующего должно дать вам немного больше данных. var_dump(curl_getinfo($ch));

ctatro85 14.03.2019 18:24

@ ctatro85 спасибо. Это помогло мне решить проблему. мне не хватало узла проверки ssl. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, ложь). Я отредактирую свой пост с пропущенной строкой.

Adriano Chaves 14.03.2019 18:33

проверьте https://secure.php.net/manual/en/function.curl-error.phpcurl_error, чтобы определить, в чем проблема

A.A Noman 14.03.2019 18:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
565
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Перемещение моего комментария к ответу и расширение его:
Выполнение следующего должно дать вам немного больше данных. var_dump(curl_getinfo($ch));

Как указано в оригинальном постере, проблема заключалась в том, что сертификат был помечен как недействительный. Чаще всего это связано с тем, что сертификат является самозаверяющим, но любой недействительный сертификат вызовет эту ошибку.

Для разработки это приемлемо. Однако в рабочей среде вы ВСЕГДА хотите проверить, что запрашиваемый вами URL-адрес имеет действительный сертификат. Обычно это делается из соображений безопасности.

Добавление curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); решило проблему.

Другие вопросы по теме