加入收藏 | 设为首页 | 会员中心 | 我要投稿 南平站长网 (https://www.0599zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php curl 分离header与body信息

发布时间:2022-01-19 00:42:37 所属栏目:PHP教程 来源:互联网
导读:php中可以通过curl来模拟http请求,同时可以获取http response header和body,当然也设置参数可以只获取其中的某一个,当设置同时获取response header和body时候,它们会一同作为结果返回,这时需要我们自己来分离它们。 下面代码是模拟向google一个http GET请
  php中可以通过curl来模拟http请求,同时可以获取http response header和body,当然也设置参数可以只获取其中的某一个,当设置同时获取response header和body时候,它们会一同作为结果返回,这时需要我们自己来分离它们。
 
  下面代码是模拟向google一个http GET请求,代码如下:
 
  function httpGet() {
      $url = 'http://www.google.com.hk';
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_HEADER, TRUE);    //表示需要response header
      curl_setopt($ch, CURLOPT_NOBODY, FALSE); //表示需要response body
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
      curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
      curl_setopt($ch, CURLOPT_TIMEOUT, 120);
      $result = curl_exec($ch);
      if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
          return $result;
      }
      return NULL;
  }
  调用上述方法后看到如下类似输出:
 
  HTTP/1.1 200 OK
  Date: Tue, 09 Jul 2013 14:21:08 GMT
  Expires: -1
  Cache-Control: private, max-age=0
  Content-Type: text/html; charset=UTF-8
  Set-Cookie: PREF=ID=75e996a7ad21f47b:FF=0:NW=1:TM=1373379668:LM=1373379668:S=TTLQQN-jwGDYnkkY; expires=Thu, 09-Jul-2015 14:21:08 GMT; path=/; domain=.google.com.hk
  Set-Cookie: NID=67=PPu7FfFeuZqwfsrUifgzjidX4JZxxCPLe9xFHjdXhfHpzs3gaykFSH5uGXy2esWTlp_rdqIYkjFDMollzI_sA-8owxD3mDh6KCRwdMa9-g5VChj0E5XAGNjo9d-sZfLN; expires=Wed, 08-Jan-2014 14:21:08 GMT; path=/; domain=.google.com.hk; HttpOnly
  P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
  Server: gws
  X-XSS-Protection: 1; mode=block
  X-Frame-Options: SAMEORIGIN
  Transfer-Encoding: chunked
  <!doctype html><html itemscope="itemscope" itemtype="http://schema.org/WebPage"><head><meta itemprop="image" content="/images/google_favicon_128.png"><title>Google</title><script>(function(){
  window.google={kEI:"VBzcUdWuHOmtiQf64IHoCw",getEI:function(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute("eid")));
  ……
  这里可以看到结果中header和body信息是在一起的,那么如何分离它们呢,方法有二种,一是通过curl自带的curl_getinfo()方法获取头的长度,然后使用substr来分割字符串,示例代码如下:
 
  $response = curl_exec($ch);
  if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
      $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
      $header = substr($response, 0, $headerSize);
      $body = substr($response, $headerSize);
  }
  第二种方法基于header和body是通过两个回车换行来分割的,所以可以通过如下代码实现:
 
  $response = curl_exec($ch);
  if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
      list($header, $body) = explode("rnrn", response, 2);
  }

(编辑:南平站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读