0

我需要一种方法来检查推文是否存在。我有类似推文的链接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 中做。

4

2 回答 2

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';
}
于 2014-11-07T18:47:56.967 回答
0

您可能必须设置 Return Transfer 标志

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

如果代码返回 30x 状态,您可能还必须添加 Follow Location 标志

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
于 2013-07-12T14:58:27.900 回答