CURL实现GET/POST请求的完整内容解析及函数封装

使用cURL完成简单的请求主要分为以下四步:
1.初始化,创建一个新cURL资源
2.设置URL和相应的选项
3.抓取URL并把它传递给浏览器
4.关闭cURL资源,并且释放系统资源

更多的选项参考官方的说明:
http://php.net/manual/zh/function.curl-setopt.php

一、默认模拟的是:GET请求

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php 
// 1、初始化一个cURL会话
$ch = curl_init();

// 2、设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, 'http://www.baidu.com');

// TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

// 3、抓取URL并将其返回给浏览器
$data = curl_exec($ch);

var_dump($data);

// 4、关闭cURL资源
curl_close($ch);
?>

显示结果:
CURL的GET请求示例

二、模拟CURL POST请求
实现过程同上,唯一的差别是设置选项:curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

源码如下:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php 
// 1、初始化一个cURL会话
$ch = curl_init();

// 2、设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, 'http://test.com/curl/ceshi.php');

// TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

// 准备提交的数据
$data = array('username'=>'zhangsan', 'age'=>18);

/**
 * POST请求,设置选项为CURLOPT_POSTFIELDS,传递一个数组
 */
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);


// 3、抓取URL并将其返回给浏览器
$res = curl_exec($ch);

echo $res;

// 4、关闭cURL资源
curl_close($ch);

?>

文件:http://test.com/curl/ceshi.php是本地的打印函数

Select Code
1
<?php var_dump($_POST);?>

最终效果:
CURL模拟POST请求

三、封装成函数

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function curlHttp($url, $data=null)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        //无论是post还是get都不能直接输出
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //判断是不是post
        if( $data ){
            //告诉小弟需要带上的数据
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        }

        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }