cURL函数在PHP中检索JSON数据


cURL function to retrieve JSON data in PHP

我编写了这个函数来从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无法连接到URL?或者也可能是API本身没有返回任何内容(但是连接成功)?

我怎么知道cURL是否正确连接到URL?

PHP curl doc说:

返回值

成功时返回TRUE,失败时返回FALSE。然而,如果如果设置了CURLOPT_RETURNTRANSFER选项,它将返回结果成功,失败时返回FALSE。

使用curl_error检查错误

如果$response === false则curl失败。

这并不意味着curl成功了,但没有得到内容。由于您已经打开了CURLOPT_RETURNTRANSFER,这意味着响应将作为字符串返回。因此,$response === ''不应表示任何内容。

如果你只有两个等号而不是三个,你就会遇到麻烦。对于3,您正在进行类型检查,因此布尔值false与空字符串不同。