技术饭

PHP数据传输神器CURL详解

copylian    0 评论    11503 浏览    2018.10.07

前言

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

CURL的使用

CURL基础

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

1.png

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);
    12345

上面的代码也就是开始所说的分为四步。我们运行下面的代码,会看到直接在浏览器上显示出来了,但是我们并没有进行任何输出,这是因为,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);
    12345678

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

curl_setopt()参数列表

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

选项

作用

类型

应用场景

CURLOPT_URL

需要获取的URL地址

String

接口地址

CURLOPT_RETURNTRANSFER

将curl_exec()获取的信息以文件流的形式返回,而不是直接输出

Bool

需要解析返回文件

CURLOPT_POST

设置请求为POST请求

Bool

模拟POST请求

CURLOPT_POSTFIELDS

POST请求时的表单信息,如果上传文件,在前面加一个@符号

Array

设置POST数据

CURLOPT_REFERER

在HTTP请求头中“Referer”的内容

String

模拟请求来源

CURLOPT_HEADER

启用时会将头文件的信息作为数据流输出

Bool

代码调试

CURLOPT_SSL_VERIFYHOST

1.检查服务器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;
     123456789

可以看到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;12345678910111213

可以看到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;
    }
    12345678910111213141516171819202122232425

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

总结

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

参考资料:

php curl选项列表(超详细)

php利用curl发送 post get del put patch 请求

PHP CURL详解

只袄早~~~
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
PHP 数据传输 CURL 

文明上网理性发言!

  • 还没有评论,沙发等你来抢