一个在奔跑线上
不断努力奋斗的PHP开发程序猿

PHP Curl的介绍、使用、案例以及封装

文章目录

余生今天给大家来了PHP 中Curl 的介绍以及使用方法,希望能够帮到大家。

PHP Curl介绍

下面是 Curl的官方解释:

PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯

libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

PHP中使用cURL实现Get和Post请求的方法

说到底,屁话一堆,对于PHP开发人员来说,你只需要知道他是一个很强大的函数,能够让您对各种服务器勾搭、搭讪和深入交流。 然而实际中最常用的也就是通过CURL 来实现Get与Post请求。

PHP Curl基础使用

说到这里,你应该知道Curl很NB,那么他应该怎么使用呢,总的来说也就四个步骤。【使用之前请确保PHP开启Curl扩展,一般默认都是开启的,具体开启方法请找度娘】

  1. Curl初始化连接句柄。
  2. 配置Curl参数。
  3. 执行Curl请求。
  4. 释放Curl句柄

看到上述步骤简单明了,我真是佩服自己。好了,废话不多说继续往下看!

第一步. Curl初始化连接句柄

白话来说就是 拿到一把钥匙,接下来就可以拿着这把钥匙进行各种骚操作。

$ch = curl_init();// 初始化Curl会话,会返回一个Curl句柄

第二步. 配置Curl参数

在这里我给大家写了一个测试地址下面的案例以此请求地址为准 http://api.hasah.cn/test/curl/curl_test返回结果为 请求方法,请求参数,请求IP以及是否为Ajax请求

// 设置请求URL
curl_setopt($ch, CURLOPT_URL, "http://api.hasah.cn/test/curl/curl_test"); 
// 设置结果以字符串返回,而不是直接输出trun或false
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

// 请求方式为post请求,设置请求参数为$data,下面不写则为GET请求
curl_setopt($ch, CURLOPT_POST, true);
$data = ["id"=>1,"name"=>"张三","age"=>"18","sex"=>"女"];
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_setopt 函数为设置传输配置

  • 参数1为 Curl句柄,也就是初始化请求返回的句柄
  • 参数2为 Curl设置类型,例如设置请求地址,请求方法等骚操作
  • 参数3位 Curl设置类型所需要的值。

参数2以及参数三 请参考菜鸟教程 curl_setopt函数

第三步、第四步. 执行Curl请求与释放Curl句柄

// 执行cURL请求
$output = curl_exec($ch);
// 释放Curl句柄
curl_close($ch);

下面吧之前写的代码合并一下,运行,输出一下,我们来看结果

$ch = curl_init();// 初始化Curl会话,会返回一个Curl句柄
        // 设置请求URL
        curl_setopt($ch, CURLOPT_URL, "http://api.hasah.cn/test/curl/curl_test"); 
        // 设置结果以字符串返回,而不是直接输出trun或false
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        // 请求方式为post请求
        curl_setopt($ch, CURLOPT_POST, true);
        // $data 为请求数据 
        $data = ["id"=>1,"name"=>"张三","age"=>"18","sex"=>"女"];
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        // 执行cURL请求
        $output = curl_exec($ch);
        // 释放Curl句柄
        curl_close($ch);
        var_dump($output);
Post请求结果

那么如何Get请求呢? 我们只需要把请求地址后面加上?参数1=值1&参数2=值2,同时把Post请求的参数去掉 ,运行,输出一下,我们来看结果

$ch = curl_init();// 初始化Curl会话,会返回一个Curl句柄
        // 设置请求URL
        curl_setopt($ch, CURLOPT_URL, "http://api.hasah.cn/test/curl/curl_test?id=2&name=李四&age=19&sex=男"); 
        // 设置结果以字符串返回,而不是直接输出trun或false
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        // 执行cURL请求
        $output = curl_exec($ch);
        // 释放Curl句柄
        curl_close($ch);
        echo $output;
Get请求结果

这样写起来是不是超级麻烦,没关系,我们这里来给他简单的封装一下,话不多说直接放代码。

/**
     * @param $url 要请求的地址
     * @param string $method 要请求的方法 默认为GET请求
     * @param null $data 请求的参数 默认为null
     * @param string[] $header  设置请求头
     * @param false $https 是否发送Https 默认不发送
     * @param int $timeout 请求超时 单位秒数 默认10秒
     * @return mixed 返回请求结果
     */
public function curl_request($url,$method="GET",$data=null,$header=["content-type: application/json"],$https=false,$timeout=10){
        $ch = curl_init();// 初始化Curl会话,会返回一个Curl句柄
        curl_setopt($ch, CURLOPT_URL,$url); // 设置请求URL
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  // 设置结果以字符串返回
        $method = strtoupper($method);// 为了方便将请求方法字符串转为大写
        // 根据传来结果设置不同请求
        switch ($method) {
            case 'POST':// 当请求为POST请求
                curl_setopt($ch, CURLOPT_POST, true);// 请求方式为POST请求
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//请求数据
                break;
            case 'PUT':// 当请求为POST请求
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); //请求方式为PUT请求
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//请求数据
                break;
            case 'DELETE':// 当请求为DELETE请求
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); //请求方式为DELETE请求
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//请求数据
                break;
            default:
                // 默认GET请求,不需要设置
                break;
        }
        if($https){
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//https请求 不验证证书
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//https请求 不验证HOST
        }
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // 发起请求模拟header头
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);// 允许 Curl 执行的最长秒数。
        $result = curl_exec($ch);//执行请求
        curl_close($ch);//关闭curl,释放资源
        return $result;
    }

说到这里就告一段落,看到这里大家感觉对自己有用的,请给博主点个赞哦(´-ω-`),希望能够帮到大家!有什么问题可以在文章下方评论哦!

赞(123) 打赏
未经允许不得转载:只缘余生 » PHP Curl的介绍、使用、案例以及封装

评论 抢沙发

7 + 3 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏