Я использую API GitHub для извлечения наиболее популярных «помеченных» элементов в PHP, и это нормально выводит строку json. Единственная проблема в том, что мой json_decode все еще просто выводит строку JSON, а не объект. Ниже приведена функция, которую я выполняю.
private function fillTable(){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.github.com/search/repositories?q=+language:php&sort=stars&order=desc',
CURLOPT_USERAGENT => 'trickell'
));
$res = curl_exec($curl);
var_dump(json_decode($res));
}
Я не совсем уверен, почему он не декодирует строку json в объект. Если вы запустите это, вы сможете увидеть, что именно тянет.
Потому что у вас есть нет JSON для декодирования, и это потому, что вы не говорите cURL возвращать вам значение, поэтому вы пытаетесь декодировать пустую строку.
$res = curl_exec($curl);
Тот $res
будет только ИСТИНА / ЛОЖЬ если вы не попросите RETURNTRANSFER
как объяснено здесь
Возвращает ИСТИНА в случае успеха или ЛОЖЬ в случае неудачи. Однако, если установлена опция CURLOPT_RETURNTRANSFER, она вернет результат в случае успеха, FALSE в случае ошибки.
Таким образом, вы должны добавить еще одну опцию к вашему вызову cURL.
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
Вы можете спросить, почему вы видите строку JSON, если она не возвращается, это отвечает на этот вопрос
TRUE для возврата передачи в виде строки возвращаемого значения curl_exec () вместо того, чтобы выводить его напрямую.
(акцент мой)
<?php
$post = ['batch_id'=> "2"];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://example.com/student_list.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
$response = curl_exec($ch);
$result = json_decode($response);
$new= $result->status;
if( $new =="1")
{
echo "<script>alert('Student list')</script>";
}
else
{
echo "<script>alert('Not Removed')</script>";
}
?>
Вам не хватает этого:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept: application/json'
));