代码之家  ›  专栏  ›  技术社区  ›  Jörg

用PHP获取HTTP响应头/重定向状态

  •  2
  • Jörg  · 技术社区  · 16 年前

    在那里,

    我目前正在开发一个基于PHP的工具来监视大量的URL及其重定向状态。我花了相当长的时间来寻找获取HTTP响应头内容的最佳方法,以提取当前重定向代码和位置。这就是目前的做法:

    $resource = fopen( $url, 'r' );
    $metadata = stream_get_meta_data( $resource );
    $metadata = $metadata['wrapper_data'];
    
    // Looping through the array to find the necessary fields
    

    这适用于我监控的95%的URL。另外,我还通过解析实际的HTML来解决这个问题,因为网站在执行重定向之前返回,因为它包含类似“这个网站已经移动到这里了”。这似乎不是一个非常健壮的解决方案,但在一些情况下它有帮助。

    这仍然会给我留下一些无法自动检查的URL。

    类似工具 Ask Apache HTTP Headers Tool 似乎更可靠,我想知道什么是获得重定向信息的更好方法?

    1 回复  |  直到 16 年前
        1
  •  6
  •   Anti Veeranna    16 年前

    您还可以尝试curl,这是检索所有头的最短可能示例,如下所示:

    <?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://stackoverflow.com');
    curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header');
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_exec($ch);
    
    function read_header($ch, $string) {
        print "Received header: $string";
        return strlen($string);
    }
    

    输出:

    [~]> php headers.php 
    Received header: HTTP/1.1 200 OK
    Received header: Cache-Control: private
    Received header: Content-Type: text/html; charset=utf-8
    Received header: Expires: Mon, 31 Aug 2009 09:38:45 GMT
    Received header: Server: Microsoft-IIS/7.0
    Received header: Date: Mon, 31 Aug 2009 09:38:45 GMT
    Received header: Content-Length: 118666
    Received header: 
    

    当然,它只是您想要的头,然后fsockopen也可以工作。除此之外,您应该使用head,因为您只需要头部,而不是内容。

    此外,curl还为https url-s工作(前提是您已经用SSL支持编译了它)。

    推荐文章