我需要一种检查推文是否存在的方法。我有像https://twitter.com/darknille/status/355651101657280512
这样的推文的链接。我最好想要一个快速的方法来检查(没有检索页面的主体,只是HEAD请求),所以我尝试了类似的东西
function if_curl_exists($url)
{
$resURL = curl_init();
curl_setopt($resURL, CURLOPT_URL, $url);
curl_setopt($resURL, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($resURL, CURLOPT_HEADERFUNCTION, 'curlHeaderCallback');
curl_setopt($resURL, CURLOPT_FAILONERROR, 1);
$x = curl_exec ($resURL);
//var_dump($x);
echo $intReturnCode = curl_getinfo($resURL, CURLINFO_HTTP_CODE);
curl_close ($resURL);
if ($intReturnCode != 200 && $intReturnCode != 302 && $intReturnCode != 304) {
return false;
}
else return true;
}
或者像这样
function if_curl_exists_1($url)
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_NOBODY, true);//head request
$result = curl_exec($curl);
$ret = false;
if ($result !== false) {
//if request was ok, check response code
echo $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 200) {
$ret = true;
}
}
curl_close($curl);
return $ret;
}
但两者都返回null curl_exec()
,没有什么可以检查http状态代码。
另一种方法是使用twitter api,例如GET statuses/show/:id
https://dev.twitter.com/docs/api/1.1/get/statuses/show/%3Aid,但如果推文不存在则没有特殊的返回值,如此处https://dev.twitter.com/discussions/8802
我需要建议最快的检查方法,我在用PHP做。
答案 0 :(得分:0)
您可能需要设置Return Transfer标志
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
如果代码返回30x状态,您可能还需要添加Follow Location标志
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
答案 1 :(得分:0)
您可以使用@get_header。它将返回一个数组,其中第一个项目具有响应代码:
$response = @get_headers($url);
print_r($response[0]);
if($response[0]=='HTTP/1.0 404 Not Found'){
echo 'Not Found';
}else{
echo 'Found';
}