用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

php curl 分离header和body信息

时间:2015-01-23  来源:西部数据  作者:西部数据

php中可以通过curl来模拟http请求,同时可以获取http response header和body,当然也设置参数可以只获取其中的某一个,当设置同时获取response header和body时候,它们会一同作为结果返回,这时需要我们自己来分离它们。

下面代码是模拟向google一个http GET请求,代码如下:

  1. function httpGet() { 
  2.     $url = 'http://www.google.com.hk'
  3.     $ch = curl_init(); 
  4.     curl_setopt($ch, CURLOPT_URL, $url); 
  5.     curl_setopt($ch, CURLOPT_HEADER, TRUE);    //表示需要response header 
  6.     curl_setopt($ch, CURLOPT_NOBODY, FALSE); //表示需要response body 
  7.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
  8.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); 
  9.     curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); 
  10.     curl_setopt($ch, CURLOPT_TIMEOUT, 120); 
  11.     $result = curl_exec($ch); 
  12.     if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') { 
  13.         return $result
  14.     } 
  15.     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来分割字符串,示例代码如下:

  1. $response = curl_exec($ch); 
  2. if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') { 
  3.     $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); 
  4.     $header = substr($response, 0, $headerSize); 
  5.     $body = substr($response$headerSize); 

第二种方法基于header和body是通过两个回车换行来分割的,所以可以通过如下代码实现:

  1. $response = curl_exec($ch); 
  2. if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') { 
  3.     list($header$body) = explode("rnrn", response, 2); 
  4. }
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门