У меня есть код PHP, который вызывает библиотеку cURL. Я использую его для получения данных JSON.
Я установил cURL opt 'CURLOPT_RETURNTRANSFER' в 1, но все равно получаю код состояния.
Код следует:
<?php function fetch_page($url) { $ch = curl_init(); $array = array( 'include'=>'ayam' ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $array); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec ($ch); curl_close ($ch); return $result; } $return = fetch_page(MY_LINK_URL); echo json_decode($return); ?>
Код выглядит совершенно правильно. Попробуйте var_dump($result)
прежде чем возвращать его, чтобы увидеть, что именно.
Кроме того, установите CURLOPT_HEADER
в 1 и проверьте источник представления вывода в своем браузере; оба из них могут помочь отладить проблему. Измените вопрос и опубликуйте результаты, если мы сможем помочь более эффективно.
Обновление: поскольку вы используете HTTPS, также добавьте
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Это выглядит правильно. У меня на самом деле такая же проблема, но когда я добавил
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
он возвращает код json правильно, а не возвращает 1 (True).
Согласно документам PHP ,
Возвращает TRUE при успешном завершении или FALSE при сбое. Однако, если параметр CURLOPT_RETURNTRANSFER установлен, он вернет результат успеха, FALSE при сбое.
Это означает, что вы должны добиться успеха: сбой результата: FALSE (который отображается как 0)
Кроме того, если вы извлекаете JSON и должны получить к нему доступ, используйте json_decode () not json_encode ().
Ну, вы должны сообщить нам, какой URL-адрес вы указываете (и какую версию php вы используете). Я пробовал с php 5.3 на «www.google.com», и он работал как ожидалось ($ result содержит всю веб-страницу)
У проблемы была такая же проблема: – cURL по локальной сети с проблемой виртуального хоста
Перед тем, как закрыть ручку curl, выполните следующие действия:
$result = curl_exec ($ch); print_r(curl_getinfo($ch)); curl_close ($ch);
Вот мое решение для обхода виртуального хоста
// This is your Virtual Hosts name $request_host = 'dev.project'; // This is the IP $request_url = '192.168.0.1'; $headers = array("Host: ".$request_host); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_URL, $request_url.'?'.$request_args); curl_setopt($ch, CURLOPT_HEADER, FALSE);
По-видимому, существует ряд причин, по которым CURLOPT_RETURNTRANSFER
можно игнорировать, а проверка сертификатов SSL – только одна из них:
В моем случае виновником был CURLOPT_POST
который я установил для true
. Я ожидал вернуть строку, состоящую из заголовка ответа HTTP и самого ответа. Вместо этого я получил код состояния 1
. Идите фигуру. К счастью, мне не нужен HTTP-заголовок, поэтому решение для меня было:
curl_setopt($ch, CURLOPT_HEADER, false);
Если мне нужна информация заголовка, я не знаю, что бы я сделал. Я потратил немного времени на то, чтобы устранить проблему.
Черт бы тебя побрал! (волна кулаком в гневе)