PHP数据传输神器CURL详解

前言

我们在使用PHP开发网站的后台的时候,有时候需要在PHP代码中请求某一个网页,比如在微信开发中,我们在代码中请求微信服务器地址,得到开发凭证access_token,这时候使用CURL来处理请求是最合适的。如果你想使用PHP来开发微信,那么CURL是一个必备的知识点。

CURL的使用

CURL基础

在PHP中我们想要使用CURL,必须在PHP的配置文件中开启CURL扩展。

curl支持的协议还是有很多的,目前支持HTTP、HTTPS、FTP、Telnet、DICT、FILE,同时也支持HTTPS的认证,HTTP POST、HTTP PUT、FTP等的上传。HTTP基于表单的上传、代理、cookie的认证。

CURL的使用步骤

curl的使用一般分为四步:

  1. curl_init() 初始化一个curl对话
  2. curl_setopt()设置curl传输选项。
  3. curl_exec()执行一个curl会话
  4. curl_close()关闭一个curl会话。

我们使用curl功能大致就分为这四步,而我们设置参数是通过curl_setopt()这个函数来实现的。我们关心的也就是curl_setopt里面的参数。

curl最简单的应用

使用CURL来简单的访问网页,得到数据。

    $url = 'http://blog.csdn.net/li741350149/article/details/53692393';
    $res = curl_init();
    curl_setopt($res,CURLOPT_URL,$url);
    curl_exec($res);
    curl_close($res);

上面的代码也就是开始所说的分为四步。我们运行下面的代码,会看到直接在浏览器上显示出来了,但是我们并没有进行任何输出,这是因为,CURL默认会把网页返回的结果展示在浏览器上。

当然,我们可以进行设置,让返回结果保存在变量中。这时就要用到我们说过的通过curl_setopt()进行设置。

    $url = 'http://blog.csdn.net/li741350149/article/category/6425553';
    $res = curl_init();
    curl_setopt($res,CURLOPT_URL,\$url);
    //true表示以文件流的方式输出到变量里面,false是把内容直接进行展示;
    curl_setopt(\$res,CURLOPT_RETURNTRANSFER,true);
    $result = curl_exec($res);
    curl_close(\$res);
    var_dump($result);

这样我们就把数据保存到变量中,方便我们后续的操作。

curl_setopt()参数列表

其实我们使用CURL,主要都是通过curl_setopt()进行设置的,下面的列表就是curl_setopt()里面参数的各种说明。

选项作用类型应用场景
CURLOPT_URL需要获取的URL地址String接口地址
CURLOPT_RETURNTRANSFER将curl_exec()获取的信息以文件流的形式返回,而不是直接输出Bool需要解析返回文件
CURLOPT_POST设置请求为POST请求Bool模拟POST请求
CURLOPT_POSTFIELDSPOST请求时的表单信息,如果上传文件,在前面加一个@符号Array设置POST数据
CURLOPT_REFERER在HTTP请求头中“Referer”的内容String模拟请求来源
CURLOPT_HEADER启用时会将头文件的信息作为数据流输出Bool代码调试
CURLOPT_SSL_VERIFYHOST1.检查服务器SSL证书中是否存在一个公用名,2.检查公用名是否存在,并且是否与提供主机名匹配Integer非SAE,BAE模拟HTTPS时需打开
CURLOPT_SSL_VERIFYPEER验证HTTPS证书是否有效,设置为False,不再进行证书验证Bool非SAE,BAE模拟HTTPS时需打开
CURLOPT_USERAGENT模拟浏览器信息String模拟浏览器访问

上面的参数都是我们常用到。

curl模拟GET请求

curl进行get请求

    $url = 'http://blog.csdn.net/li741350149/article/category/6425553';
     $curl = curl_init();
     //需要请求的是哪个地址
     curl_setopt($curl,CURLOPT_URL,$url);
     //表示把请求的数据已文件流的方式输出到变量中
     curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
     $result = curl_exec($curl);
     curl_close($curl);
     return $result;

可以看到get请求的代码和上面的一样,我们可以通过url地址进行参数的传递

**curl模拟POST请求

post请求和get请求大致一样,不过post和get的提交数据方式不一样。只需要设置两个参数就可以了。

    $url = 'http://blog.csdn.net/li741350149/article/category/6425553';
    $curl = curl_init();
    //需要请求的是哪个地址
    curl_setopt($curl,CURLOPT_URL,$url);
    //表示把请求的数据已文件流的方式输出到变量中
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    //设置请求方式是post方式
    curl_setopt($curl,CURLOPT_POST,1);
    //设置post请求提交的表单信息
    curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
    $result = curl_exec($curl);
    curl_close($curl);
    return $result;

可以看到post请求只是设置请求方式为post,并且把数据传递过去。

**curl模拟发送HTTPS请求

进行微信开发的人都知道,微信的接口使用的都是HTTPS进行传输的,并且通常都是在微信服务器和个人服务器上进行数据的传递,这中间正式依靠了curl进行实现的。curl是可以进行模拟HTTPS进行传输的。下面的就是使用curl把HTTPS协议的get请求和post请求封装到一起。

    //https请求(支持GET和POST)
    function http_request($url,$data = null){
        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, $url);
        //设置请求的代理信息
        $user_agent = isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT'] : "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
        curl_setopt($curl,CURLOPT_USERAGENT,$user_agent);
        //设置请求来源信息
        curl_setopt($curl,CURLOPT_AUTOREFERER,TRUE);

        //设置和ssl相关的信息
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if(!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        //var_dump(curl_error($curl));
        curl_close($curl);
        return $output;
    }

其实就是设置了两个和SSL相关的参数。参数的解释都在表格中进行解释过。

总结

我们在使用CURL的时候,我们可以把我们常用到的一些方法,像get请求post请求等,封装起来,这样在使用时直接调用方法进行了,不用每次都要写一遍。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值