функция cURL для извлечения данных JSON в PHP - PullRequest
1 голос
/ 03 декабря 2011

Я кодировал эту функцию для извлечения данных JSON из API (который возвращает данные в формате JSON).

function file_get_contents_curl($url,$json=false){
    $ch = curl_init();
    $headers = array();
    if($json) {
        $headers[] = 'Content-type: application/json';
        $headers[] = 'X-HTTP-Method-Override: GET';
    }
    $options = array(
        CURLOPT_URL => $url,
        CURLOPT_HTTPHEADER => array($headers),
        CURLOPT_TIMEOUT => 5,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_HEADER => 0,
        CURLOPT_FOLLOWLOCATION => 1,
        CURLOPT_MAXREDIRS => 3,
        CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'
    );
    curl_setopt_array($ch,$options);
    $response = curl_exec($ch);
    curl_close($ch);
    if($response === false) {
        return false;
    } else {
        return $response;
    }
}

Если $ response на самом деле ===false, означает ли это, что cURL не может подключитьсяна URL?Или может быть так, что сам API ничего не возвратил (но соединение прошло успешно)?

Как узнать, правильно ли cURL подключается к URL?

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

PHP curl doc говорит:

Возвращаемые значения

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

Проверьте ошибку, используя curl_error

0 голосов
/ 03 декабря 2011

Если $response === false, то свернуть не удалось.

Это не значит, что curl преуспел, но не получил контента. Поскольку вы включили CURLOPT_RETURNTRANSFER, это означает, что ответ будет возвращен в виде строки. Таким образом, никакое содержимое не должно быть указано $response === ''.

Если вы столкнетесь с неприятностями, то у вас будет только два знака равенства, а не три. При использовании трех вы выполняете проверку типов, поэтому логическое значение false отличается от пустой строки.

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