zoukankan      html  css  js  c++  java
  • 转:PHP--获取响应头(Response Header)方法

    转:http://blog.sina.com.cn/s/blog_5f54f0be0102uvxu.html

    PHP--获取响应头(Response Header)方法

    方法一:

    ==========================================
    $baiduUrl = "http://www.baidu.com/link?url=LZE_J6a1AcieLlTzNxUZQVpe2trQ99zx1ls85ux8dXaGlFB3eiEm_Y6SJC1sNQf_";
     
    file_get_contents($baiduUrl);
    $responseInfo = $http_response_header;
     
    print_r($responseInfo);
    // 输出:
    Array
    (
        [0] => HTTP/1.1 302 Found
        [1] => Date: Fri, 27 Jun 2014 02:47:35 GMT
        [2] => Server: Apache
        [3] => Location: http://www.edeng.cn/s/chuna/
        [4] => Cache-Control: max-age=86400
        [5] => Expires: Sat, 28 Jun 2014 02:47:35 GMT
        [6] => Content-Length: 212
        [7] => Connection: Close
        [8] => Content-Type: text/html; charset=iso-8859-1
        [9] => HTTP/1.1 200 OK
        [10] => Server: nginx/1.4.3
        [11] => Date: Fri, 27 Jun 2014 02:47:35 GMT
        [12] => Content-Type: text/html; charset=utf-8
        [13] => Connection: close
        [14] => Expires: Mon, 26 Jul 1997 05:00:00 GMT
        [15] => Last-Modified: Fri, 27 Jun 2014 02:47:35 GMT
        [16] => Cache-Control: no-store, no-cache, must-revalidate
        [17] => Pragma: no-cache
        [18] => Vary: User-Agent,Accept-Encoding
        [19] => X-Cache: MISS from web1.edeng.cn
        [20] => Via: 1.1 web1.edeng.cn:80 (squid)
    )
     
    遍历该数组即可得到相应的值。比如要想获得 Location 的值:
     
    foreach ($responseInfo as $loop) {
    if(strpos($loop, "Location") !== false){
    $edengUrl = trim(substr($loop, 10));
    print_r($edengUrl);
    // 输出: http://www.edeng.cn/s/chuna/
    }
    }
     
    方法二:
    ==========================================
    function get_head($sUrl){
    $oCurl = curl_init();
    // 设置请求头, 有时候需要,有时候不用,看请求网址是否有对应的要求
    $header[] = "Content-type: application/x-www-form-urlencoded";
    $user_agent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36";
     
    curl_setopt($oCurl, CURLOPT_URL, $sUrl);
    curl_setopt($oCurl, CURLOPT_HTTPHEADER,$header);
    // 返回 response_header, 该选项非常重要,如果不为 true, 只会获得响应的正文
    curl_setopt($oCurl, CURLOPT_HEADER, true);
    // 是否不需要响应的正文,为了节省带宽及时间,在只需要响应头的情况下可以不要正文
    curl_setopt($oCurl, CURLOPT_NOBODY, true);
    // 使用上面定义的 ua
    curl_setopt($oCurl, CURLOPT_USERAGENT,$user_agent);
    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
    // 不用 POST 方式请求, 意思就是通过 GET 请求
    curl_setopt($oCurl, CURLOPT_POST, false);
     
    $sContent = curl_exec($oCurl);
    // 获得响应结果里的:头大小
    $headerSize = curl_getinfo($oCurl, CURLINFO_HEADER_SIZE);
    // 根据头大小去获取头信息内容
    $header = substr($sContent, 0, $headerSize);
        
    curl_close($oCurl);
     
    return $header;
    }
     
    如上面解析,我们可以成功获得到头信息:
    HTTP/1.1 302 Found
    Date: Fri, 27 Jun 2014 02:47:35 GMT
    Server: Apache
    Location: http://www.edeng.cn/s/chuna/
    Cache-Control: max-age=86400
    Expires: Sat, 28 Jun 2014 02:47:35 GMT
    Connection: Keep-Alive
    Content-Type: text/html; charset=iso-8859-1
     
    这时候,如果我们想获得 Location  项的内容,可以先把上面头正文件按回车换行切割成数组,然后再遍历匹配,如:
    $responseHead = post_head($baiduUrl);
     
    $headArr = explode(" ", $responseHead);
    foreach ($headArr as $loop) {
    if(strpos($loop, "Location") !== false){
    $edengUrl = trim(substr($loop, 10));
    print_r($edengUrl);
    // 输出: http://www.edeng.cn/s/chuna/
    }
    }
  • 相关阅读:
    利用存储过程生成随机数,并用其它存储过程调用此过程
    dataGridView中的数据操作
    listView绑定数据
    我的简易 数据存取器 的封装
    dataGridView 控件的简单绑定
    文件写入写出的封装
    Button1.Attributes.Add()方法小结
    自定义分页栏
    安迪的找工作日志——9.12笔试(优酷土豆)问题及解答
    安迪的找工作日志——9.13在教四四楼墙上看到的
  • 原文地址:https://www.cnblogs.com/swing07/p/5534026.html
Copyright © 2011-2022 走看看