php curl 分离header和body信息

转载 2014年03月14日 23:22:32

php curl 分离header和body信息


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("\r\n\r\n", response, 2);
}

curl 查看HTTP 响应头信息

1.curl I 查看HTTP 响应头信息 curl -I "http://www.taobao.com" HTTP/1.1 200 OK #HTTP协议 HTTP 返回码 Serve...
  • caoshuming_500
  • caoshuming_500
  • 2013-11-01 20:54:50
  • 35477

[shell]curl结果获取http header的问题

在通过curl请求http获取response header时, 发现字符串拼接一个问题。 比如以下程序:hadoop@1:~$ ct=$(curl -s -I http://www.baidu.c...
  • moxiaomomo
  • moxiaomomo
  • 2017-10-24 12:15:51
  • 1070

curl命令获取HTTP头文件

# curl -I URL 该选项功能:   -I/--head               (HTTP/FTP/FILE)  Fetch  the  HTTP-header only! HTT...
  • ANLJF
  • ANLJF
  • 2011-10-10 11:49:06
  • 8529

libcurl之curl_easy_getinfo的使用教程

Code: // getinfo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; #includ...
  • php_fly
  • php_fly
  • 2013-12-06 19:22:10
  • 11795

libcurl增加HTTP header 和 POST之后获取返回数据

libcurl增加HTTP header 和 POST之后获取返回数据 flyfishstatic size_t write_data(void *ptr, size_t size, size_t ...
  • flyfish1986
  • flyfish1986
  • 2016-03-15 14:34:20
  • 7507

[乐意黎原创]php curl 分离header和body信息

小黎在进行curl 抓取时,会返回如下所列信息。 这时,我并不需要表头信息,只需要json数据。 返回信息:  HTTP/1.1 200 OK Content-Type: applicatio...
  • aerchi
  • aerchi
  • 2017-02-14 15:08:54
  • 798

php CURL 发送请求详解

cURL可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及...
  • u013372487
  • u013372487
  • 2016-05-12 16:34:11
  • 7976

【php中的curl】php中curl的详细解说

这几天在帮一些同学处理问题的时候,突然发现这些同学是使用file_get_contents()函数来采集页面内容的,貌似都没有curl的概念亦或是对这种工具特别不敏感, 本文我来给大家详细介绍下cU...
  • yanhui_wei
  • yanhui_wei
  • 2014-03-19 14:38:05
  • 131011

CURLOPT_HEADER 控制是否返回请求头信息

微信请求并保存access_token的一段代码 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_set...
  • u013758819
  • u013758819
  • 2015-01-20 15:30:33
  • 6002

Linux下curl命令的使用

1.curl 简单来说,curl是一个用url方式,来
  • wangjianno2
  • wangjianno2
  • 2014-10-01 16:41:12
  • 2028
收藏助手
不良信息举报
您举报文章:php curl 分离header和body信息
举报原因:
原因补充:

(最多只允许输入30个字)