独立开发者系列(43)—— 详解CURL函数库

在 PHP 开发中,CURL(Client URL Library)是一个非常强大且常用的工具,它允许我们与各种网络资源进行交互,如发送 HTTP 请求、获取网页内容、上传文件等。本文将详细介绍 PHP 中 CURL 库的详细使用方法 。和python里面的该库作用是类似的。这里主要是以PHP为载体进行全方位的总结使用。 该库在编程里面使用的频率非常高,基本应用里面,除了对MYSQL的交互,就是对远程API的获取,可以理解为第二使用的库。没有mysql的php基本比较废,而没有CURL也同样

$curl = curl_init();  //初始化资源

这里理解下PHP里面资源的定义概念:在 PHP 中,“资源” 是一种特殊的数据类型。资源是由外部程序(如数据库连接、文件句柄、图像操作句柄等)创建和管理的数据。资源并不是像整数、字符串、数组等那样的具体数据值,而是指向外部资源的引用或标识符。例如,使用 fopen() 函数打开一个文件时,它会返回一个文件资源,可以使用这个资源来进行后续的文件读取、写入等操作。再比如,连接到数据库时,返回的数据库连接对象也是一种资源。资源通常需要通过特定的函数来进行操作和释放,以避免资源泄漏。当不再需要使用资源时,应该使用相应的函数(如 fclose() 关闭文件资源、关闭数据库连接等)来释放资源。
资源是和int boolen float object 一样被定义的类型 ,在常用的编程里面,很少会有资源类型的概念,而curl_init就是打开一个初始化的资源。

请求参数的配置

curl_setopt($curl, CURLOPT_URL, "http://example.com"); //链接
curl_setopt($curl, CURLOPT_POST, true); // 发送post 请求 默认不设置就是get直接获取
$data = ['key1' => 'value1', 'key2' => 'value2'];  //相关数据
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));//如果是post方式 发送数据 这是请求的参数
 $headers = ['Content-Type: application/json'];
 curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); //设置请求头信息,也就是我们平时说的请求头 
 curl_setopt($curl, CURLOPT_TIMEOUT, 10); //请求超时,特别是请求境外的时候,很容易超时 这个很重要,如果是正式开发里面,对远程异常的请求忍受上限是5秒,拿不到结果直接报错,已经严重影响业务的运行
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //如果是true 返回的变量里面,false 直接输出。如果我们需要处理里面的相关字符串,需要设置为true 如果我们只是单纯的转发静态网页内容,可以设置为false,直接返回出来
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //是否验证证书,如果是请求支付宝相关的链接,需要验证数字证书,默认只是请求内容,可不建立安全链接 不用证书居多,使用证书需要部署证书的路径
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"); //请求里面的user-Agent 一般PHP里面都是请求自己的合法的链接,对这个伪装性要求不高,如果需要伪装,使用python更方便一些
curl_setopt($ch,CURLOPT_HEADER, 1);// 设置获取响应头 curl默认是没有获取响应头的,和python不一样

更详细的参数,需要去查看该参数手册,上述是一些开发里面用到的参数配置

$response = curl_exec($ch); //参数相关配置好之后,发出请求 这样就获取到页面请求的结果
 curl_close($ch); //一般请求完成这个页面之后,我们需要关闭释放该资源,减少内存的相关消耗

如果业务是顺畅的, 我们是不用知道错误请求码,但是如果是请求异常,我们就需要对错误码进行逻辑分离。而这个是解决问题的关键,基本上怎么处理错误(90%以上的逻辑都是正确的,但是遇到10%的错误请求,会让我们系统瘫痪,所以重点是监测请求,在开发里面,对这个错误的监测不重视,吃过大亏)。

      if ($response === false) { //请求异常需要进入日志记录
            $errorCode = curl_errno($ch); //我们拿到的错误码 是数字,
            echo "CURL 错误码: ". $errorCode. "\n"; 
        }
相关错误码
1. `CURLE_OK` (0): 表示操作成功,没有错误。
2. `CURLE_UNSUPPORTED_PROTOCOL` (1): 不支持的协议。
3. `CURLE_FAILED_INIT` (2): 初始化失败。
4. `CURLE_URL_MALFORMAT` (3): URL 格式错误。
5. `CURLE_COULDNT_RESOLVE_PROXY` (5): 无法解析代理服务器。
6. `CURLE_COULDNT_RESOLVE_HOST` (6): 无法解析主机。
7. `CURLE_COULDNT_CONNECT` (7): 无法连接到主机或代理。
8. `CURLE_OPERATION_TIMEDOUT` (28): 操作超时。
9. `CURLE_SSL_CONNECT_ERROR` (35): SSL 连接错误。

拓展使用需求: (获取更详细的响应设置)

curl_getinfo 函数可以获取以下一些常见的参数信息:
CURLINFO_EFFECTIVE_URL:获取最终实际请求的 URLCURLINFO_HTTP_CODE:获取 HTTP 响应状态码。
CURLINFO_TOTAL_TIME:获取整个请求所花费的总时间(包括 DNS 解析、连接建立、数据传输等),以秒为单位。
CURLINFO_NAMELOOKUP_TIME:获取 DNS 解析所花费的时间,以秒为单位。
CURLINFO_CONNECT_TIME:获取连接建立所花费的时间,以秒为单位。
CURLINFO_PRETRANSFER_TIME:获取从开始到准备传输所花费的时间,以秒为单位。
CURLINFO_SIZE_UPLOAD:获取上传的数据大小,以字节为单位。
CURLINFO_SIZE_DOWNLOAD:获取下载的数据大小,以字节为单位。
CURLINFO_SPEED_DOWNLOAD:获取下载速度,以字节 / 秒为单位。
CURLINFO_SPEED_UPLOAD:获取上传速度,以字节 / 秒为单位
 
  示例使用:
  $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); //HTTP代码的使用相对比较频繁 状态码属于常用判断

基本上日常使用的请求远程网络页面,还有常见的协议基本使用到这些设置。可以完成URL的响应监测,远程接口数据获取,DNS响应速度获取,判断主机是否还存在(判断网络域名有效的关键)。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大梁来了

千山万水总是情,打赏一块行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值