我需要一种方法来检查推文是否存在。我有类似推文的链接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但是如果tweet 不存在则没有特殊的返回值,如前所述这里https://dev.twitter.com/discussions/8802
我需要建议最快的检查方法是什么,我在 php 中做。