Почему cURL всегда возвращает код состояния? - PullRequest
3 голосов
/ 01 апреля 2011

У меня есть некоторый код 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);
?>

Ответы [ 6 ]

4 голосов
/ 26 июня 2012

Это выглядит правильно. У меня на самом деле та же проблема, но когда я добавил

curl_setopt($ch,  CURLOPT_RETURNTRANSFER, 1);

возвращает код JSON правильно, а не 1 (True).

3 голосов
/ 01 апреля 2011

В соответствии с PHP документами ,

Возвращает TRUE в случае успеха или FALSE в случае ошибки.Однако, если установлена ​​опция CURLOPT_RETURNTRANSFER, она вернет результат при успехе, FALSE при ошибке.

Так что это означает, что вы должны получить успех: результат сбоя: FALSE (который отображается как 0)

Также, если вы выбираете JSON и вам нужен доступ к нему, используйте json_decode () , а не json_encode ().

3 голосов
/ 01 апреля 2011

Код выглядит абсолютно правильно.Попробуйте var_dump($result) перед возвратом, чтобы увидеть, что именно.

Кроме того, установите CURLOPT_HEADER на 1 и проверьте источник просмотра вывода в вашем браузере;оба из них могут помочь отладить проблему.Отредактируйте вопрос и опубликуйте результаты, если мы сможем помочь вам более эффективно.

Обновление: Поскольку вы используете HTTPS, также добавьте

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
0 голосов
/ 22 марта 2014

Кажется, есть ряд причин, по которым CURLOPT_RETURNTRANSFER можно игнорировать, и проверка SSL-сертификата - только одна из них:

В моем случае виновником было CURLOPT_POST, которое я установил на true.Я ожидал получить строку, состоящую из заголовка ответа HTTP и самого ответа.Вместо этого я получал код состояния 1.Пойди разберись.К счастью, мне не был нужен заголовок HTTP, поэтому решение для меня было:

curl_setopt($ch, CURLOPT_HEADER, false);

Если бы мне нужна была информация заголовка, я не знаю, что бы я делал.Я потратил безумное количество времени на поиск проблемы.

Черт возьми, PHP завиток!(волнует кулак в гневе)

0 голосов
/ 01 апреля 2011

Возможно, возникла похожая проблема: - 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);
0 голосов
/ 01 апреля 2011

Ну, вы должны сказать нам, на какой URL вы указываете (и на какую версию php вы работаете). Я пытался с php 5.3 на "www.google.com", и он работал как ожидалось ($ result содержит всю веб-страницу)

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