检查是否存在推文状态?

时间:2013-07-12 13:20:04

标签: php http twitter

我需要一种检查推文是否存在的方法。我有像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做。

2 个答案:

答案 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';
}