cURL函数用于在PHP中检索JSON数据

时间:2011-12-03 16:42:18

标签: php curl

我将此函数编码为从API检索JSON数据(以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无法连接到该网址?或者也可能是API本身没有返回任何内容(但连接成功)?

我如何知道cURL是否正确连接到URL?

2 个答案:

答案 0 :(得分:1)

PHP curl doc说:

  

返回值

     

成功时返回TRUE,失败时返回FALSE。但是,如果   设置CURLOPT_RETURNTRANSFER选项后,它将返回结果   成功,失败就错了。

使用curl_error

检查错误

答案 1 :(得分:0)

如果$response === false则卷曲失败。

这并不意味着卷曲成功但没有内容。由于您已启用CURLOPT_RETURNTRANSFER,这意味着响应将作为字符串返回。因此,$response === ''不应指明任何内容。

如果你只遇到两个等号而不是三个等号,你会遇到麻烦。有三个,你正在进行类型检查,所以布尔false与空字符串不同。