PHP get_headers() alternative

后端 未结 3 2010
走了就别回头了
走了就别回头了 2020-12-28 10:46

I need a PHP script that reads the HTTP response code for each URL request.

something like

$headers = get_headers($theURL);
return substr($headers         


        
相关标签:
3条回答
  • 2020-12-28 11:07

    Use HttpRequest if you can: http://de2.php.net/manual/en/class.httprequest.php

    $request = new HttpRequest("http://www.example.com/");
    $request->send();
    echo $request->getResponseCode();
    

    Or do it the hard way: http://de2.php.net/manual/en/function.fsockopen.php

    $errno = 0;
    $errstr = "";
    
    $res = fsockopen('www.example.com', 80, $errno, $errstr);
    
    $request = "GET / HTTP/1.1\r\n";
    $request .= "Host: www.example.com\r\n";
    $request .= "Connection: Close\r\n\r\n";
    
    fwrite($res, $request);
    
    $head = "";
    
    while(!feof($res)) {
        $head .= fgets($res);
    }
    
    $firstLine = reset(explode("\n", $head));
    $matches = array();
    preg_match("/[0-9]{3}/", $firstLine, $matches);
    var_dump($matches[0]);
    

    Curl may be also a good option, but the best option is to beat your admin ;)

    0 讨论(0)
  • 2020-12-28 11:16

    You can build and read your own HTTP queries with fsockopen and regular file operations. Check out my earlier answer on this topic:

    Are there any other options for rest clients besides CURL?

    0 讨论(0)
  • 2020-12-28 11:24

    If cURL is enabled, you can use it to get the whole header or just the response code. The following code assigns the response code to the $response_code variable:

    $curl = curl_init();
    curl_setopt_array( $curl, array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_URL => 'http://stackoverflow.com' ) );
    curl_exec( $curl );
    $response_code = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
    curl_close( $curl );
    

    To get the whole header you can issue a HEAD request, like this:

    $curl = curl_init();
    curl_setopt_array( $curl, array(
        CURLOPT_HEADER => true,
        CURLOPT_NOBODY => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_URL => 'http://stackoverflow.com' ) );
    $headers = explode( "\n", curl_exec( $curl ) );
    curl_close( $curl );
    
    0 讨论(0)
提交回复
热议问题