>  기사  >  백엔드 개발  >  웹 페이지 요청 상태 코드를 가져오는 PHP의 예

웹 페이지 요청 상태 코드를 가져오는 PHP의 예

怪我咯
怪我咯원래의
2017-07-14 15:04:183059검색

웹사이트에 페이지를 표시하라는 요청이 서버로 전송되면(예: 사용자가 브라우저를 통해 페이지에 액세스하거나 Googlebot이 페이지를 크롤링하는 경우) 서버는 다음에 대한 응답으로 HTTP 상태 코드를 반환합니다. 요청.

이 상태 코드는 요청 상태에 대한 정보를 제공하여 Googlebot에 귀하의 사이트와 요청한 페이지에 대해 알려줍니다.

몇 가지 일반적인 상태 코드는 다음과 같습니다.

200 – 서버가 웹페이지를 성공적으로 반환했습니다.

404 – 요청한 웹페이지가 존재하지 않습니다.

503 – 서버 시간이 초과되었습니다.

이 문서에서는 웹 페이지 요청 상태는 다음과 같습니다.

방법 1, fsockopen 사용

코드는 다음과 같습니다.

function get_http_code($url="localhost", $port=80, $fsock_timeout=10){
    set_time_limit(0);
    ignore_user_abort(true);

    // 记录开始时间
    list($usec, $sec) = explode(" ", microtime(true));
    $timer['start'] = (float)$usec + (float)$sec;

    // 校验URL
    if(!preg_match("/^https?:\/\//i", $url)){
        $url = "http://".$url;
    }
    // 支持HTTPS
    if(preg_match("/^https:\/\//i", $url)){
        $port = 443;
    }

    // 解析URL
    $urlinfo = parse_url($url);
    if(empty($urlinfo['path'])){
        $urlinfo['path'] = '/';
    }
    $host = $urlinfo['host'];
    $uri = $urlinfo['path'] . (empty($urlinfo['query'])?'':$urlinfo['query']);

    // 通过fsock打开连接
    if(!$fp = fsockopen($host, $port, $errno, $error, $fsock_timeout)){
        list($usec, $sec) = explode(" ", microtime(true));
        $timer['end'] = (float)$usec + (float)$sec;
        $usetime = (float)$timer['end'] - (float)$timer['start'];

        return array('code'=>-1, 'usetime'=>$usetime);
    }

    // 提交请求
    $status = socket_get_status($fp);
    $out = "GET {$uri} HTTP/1.1\r\n";
    $out .= "Host: {$host}\r\n";
    $out .= "Connection: Close\r\n\r\n";
    $write = fwrite($fp, $out);
    if(!$write){
        list($usec, $sec) = explode(" ", microtime(true));
        $timer['end'] = (float)$usec + (float)$sec;
        $usetime = (float)$timer['end'] - (float)$timer['start'];

        return array('code'=>-2, 'usetime'=>$usetime);
    }

    $ret = fgets($fp, 1024);
    preg_match("/http\/\d\.\d\s(\d+)/i", $ret, $m);
    $code = $m[1];
    fclose($fp);

    list($usec, $sec) = explode(" ", microtime(true));
    $timer['end'] = (float)$usec + (float)$sec;
    $usetime = (float)$timer['end'] - (float)$timer['start'];

    return array('code'=>$code, 'usetime'=>$usetime);
}

file_get_contents는 fsockopen 함수의 간단한 패키지이지만 크롤링에 성공합니다. 비율이 매우 높아서 스누피 사용에 문제가 있을 때 주로 사용합니다. 5.0.0에서는 컨텍스트에 대한 지원이 추가되어 헤더 정보를 보내고 사용자 에이전트, 참조자 및 쿠키를 사용자 정의할 수도 있습니다. 5.1.0에는 파일의 일부만 읽을 수 있도록 offset 및 maxlen 매개변수가 추가되었습니다.

방법 2, snoopy.class.php 사용

스누피는 브라우저의 기능을 시뮬레이션하는 데 사용되는 PHP 클래스이며 웹 콘텐츠를 얻고 양식을 보낼 수 있습니다.

아아아아

위 내용은 웹 페이지 요청 상태 코드를 가져오는 PHP의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.