我编写了这个函数来从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
与空字符串不同。