资讯专栏INFORMATION COLUMN

PHP的CURL功能扩展基本用法

nicercode / 540人阅读

摘要:的功能提供了很多函数,需要将这些函数按特定的步骤组合到一起,我们先来了解下建立请求的基本步骤。代码如下我们可以通设置函数的不同参数,可以获得不同的结果,这也是扩展的强大之处。函数的常用参数选项具体可查阅官方文档,此处就不列举。

PHP的curl功能提供了很多函数,需要将这些函数按特定的步骤组合到一起,我们先来了解下PHP建立curl请求的基本步骤。

$ch = curl_init(); // 创建一个新的CURL资源赋给变量$ch

curl_setopt($ch, CURLOPT_URL, $url); // 设置URL

$response = curl_exec($ch); // 执行,获取URL并输出到浏览器

curl_close($ch); // 释放资源

如果我们希望获取内容但不输出,可以使用 CURLOPT_RETURNTRANSFER 参数,并设置其值为非0或者true值。代码如下:curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

我们可以通设置函数curl_setopt()的不同参数,可以获得不同的结果,这也是CURL扩展的强大之处。curl_setopt()函数的常用参数选项具体可查阅官方文档,此处就不列举。

下面是我常用的curl get和post请求的方法:

get请求:

public function httpGet(string $url = "")
    {
        // 记录请求信息的日志
        // todo
        
        try {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_TIMEOUT, 60);
            //https 请求
            if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") {
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            }
            $response = curl_exec($ch);
            $errorCode = curl_errno($ch);
            curl_close($ch);
            if (!empty($errorCode)) {
                // 可记录错误码日志
                return null;
            }
            // 记录返回结果日志
            return $response;
        } catch (Exception $e) {
            $errorLog = [
                "msg" => $e->getMessage(),
                "trace" => $e->getTraceAsString(),
                "data" => [
                    "url" => $url,
                ]
            ];
            // 记录错误日志
            return null;
        }
    }

POST请求:

public function httpPost(string $url = "", array $data = [])
    {
        // 记录请求信息的日志
        // todo
        
        try {
            $jsonData = json_encode($data);
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $jsonData);
            curl_setopt($curl, CURLOPT_HEADER, 0);
            curl_setopt($curl, CURLOPT_TIMEOUT, 60);
            curl_setopt($curl, CURLOPT_HTTPHEADER, [
                "Content-Type: application/json; charset=utf-8",
                "Content-Length:" . strlen($jsonData)
            ]);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            //https 请求
            if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") {
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            }
            $result = curl_exec($curl);
            $errorCode = curl_errno($curl);
            curl_close($curl);
            if (!empty($errorCode)) {
                // 可记录错误码日志
                return null;
            }
            // 记录返回结果日志
            return json_decode($result, true);
        } catch (Exception $e) {
            $errorData = [
                "msg" => $e->getMessage(),
                "trace" => $e->getTraceAsString(),
                "data" => [
                    "url" => $url,
                    "postData" => $data
                ]
            ];
            // 记录错误日志
            return null;
        }
    }

欢迎各位朋友进行交流。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29899.html

相关文章

  • SOA面向服务基础

    摘要:面向服务面向服务的基础面向服务的三层应用层,服务层,数据层应用层用于给用户展示,,,,安卓。在服务器端,进程保持睡眠状态直到调用信息到达为止。编译完成,提示我们已经在下了。 面向服务 面向服务的基础 面向服务的三层:应用层,服务层,数据层 * 应用层:用于给用户展示,PC,H5,IOS,安卓。 * 服务层:业务逻辑,提供接口(商品,订单,支付,用户,物流)。 * 数据层:提供数据支持(...

    songze 评论0 收藏0
  • php扩展cURL执行中途无响应

    摘要:今天跑脚本遇到一个奇怪的问题,就是请求到后期会出现程序阻塞卡死,无异常无响应,一直挂起,脚本也不会自动结束。设置允许执行的最长秒数。增加执行超时后的请求设置函数。从错误类型中,看到确实是有一些请求在秒内未能执行完毕。 今天跑脚本遇到一个奇怪的问题,就是cURL请求到后期会出现程序阻塞卡死,无异常无响应,一直挂起,脚本也不会自动结束。跟对方沟通后说,哥们儿,是不是你们的程序有问题啊,这边...

    hufeng 评论0 收藏0
  • QueryList 4.0 简洁、优雅、可扩展PHP采集工具(爬虫)

    QueryList 简介 QueryList是一套简洁、优雅、可扩展的PHP采集工具(爬虫),基于phpQuery。 特性 拥有与jQuery完全相同的CSS3 DOM选择器 拥有与jQuery完全相同的DOM操作API 拥有通用的列表采集方案 拥有强大的HTTP请求套件,轻松实现如:模拟登陆、伪造浏览器、HTTP代理等意复杂的网络请求 拥有乱码解决方案 拥有强大的内容过滤功能,可使用jQue...

    Astrian 评论0 收藏0
  • PHP Q&A

    摘要:有哪些作用域函数作用域类作用域函数作用域是什么函数体是一个局部作用域函数体中无法直接访问外部全局变量,必须通过才能访问外部全局变量无法访问通知错误正确访问外部全局变量无法访问函数体中可以直接访问常量输出函数体中可以直接访问类静态属性静态方法 PHP 有哪些作用域? 函数作用域 类作用域 PHP 函数作用域是什么? 函数体是一个局部作用域 函数体中无法直接访问外部全局变量,必须通...

    mikasa 评论0 收藏0
  • PHP7.0.0在OS X编译安装

    摘要:目前支持和协议。除此以外,还能在可能的字符编码之间相互进行编码转换。如果启用了这个功能,输入字符编码可能将自动转换成。这些可能在未来增加。 前言 PHP7即将在12月3日正式发布,而RC8是已经差不多稳定了的版本,后续的GA版本主要都是在修复bug,所以为了未来开发环境的升级,准备尝试安装一下。 PHP7.0.0将在12月3日正式发布,但是12月2日时github已经发布出PHP-7...

    lordharrd 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<