当前位置: 首页 > news >正文

PHP cURL 函数初学者完全指南

文章精选推荐

1 JetBrains Ai assistant 编程工具让你的工作效率翻倍
2 Extra Icons:JetBrains IDE的图标增强神器
3 IDEA插件推荐-SequenceDiagram,自动生成时序图
4 BashSupport Pro 这个ides插件主要是用来干嘛的 ?
5 IDEA必装的插件:Spring Boot Helper的使用与功能特点
6 Ai assistant ,又是一个写代码神器
7 Cursor 设备ID修改器,你的Cursor又可以继续试用了

文章正文

PHP cURL 函数初学者完全指南

cURL 是 PHP 中一个强大的库,用于通过 URL 执行 HTTP 请求。它支持 GET、POST 等请求方式,并能处理复杂的网络操作,比如上传文件、设置 HTTP 头、处理重定向、SSL 认证等。

1. 什么是 cURL?

cURL(Client URL)是一种命令行工具和库,用于与服务器进行数据传输。PHP 提供了内置的 cURL 扩展,通过它可以使用 PHP 编程实现与 API、网页等的交互。

基本用途

  • 获取网页内容
  • 提交表单数据
  • 调用 RESTful API
  • 下载/上传文件

2. 启用 cURL

在大多数现代 PHP 环境中,cURL 默认启用。如果未启用,可以通过以下步骤开启:

检查 cURL 是否启用
<?php
phpinfo();
?>

在页面中查找 cURL,如果找到,说明已启用;如果没有,按以下步骤启用。

启用步骤
  1. 打开 PHP 配置文件 php.ini
  2. 确保以下行未被注释:
    extension=curl
    
  3. 重启 Web 服务器(如 Apache 或 Nginx)。

3. cURL 基本操作

cURL 的核心函数

PHP 中使用 cURL 需要以下几个核心函数:

  1. curl_init():初始化一个 cURL 会话。
  2. curl_setopt():设置 cURL 请求的选项(如 URL、请求方法、头部等)。
  3. curl_exec():执行 cURL 请求并获取响应。
  4. curl_close():关闭 cURL 会话释放资源。
简单的 GET 请求

以下是通过 cURL 获取网页内容的示例:

<?php
// 初始化 cURL
$ch = curl_init();// 设置 URL
curl_setopt($ch, CURLOPT_URL, "https://www.example.com");// 将结果以字符串返回,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// 执行请求
$response = curl_exec($ch);// 检查是否有错误
if (curl_errno($ch)) {echo 'cURL Error: ' . curl_error($ch);
} else {echo $response;
}// 关闭 cURL 会话
curl_close($ch);
?>

说明

  • CURLOPT_RETURNTRANSFER:设置为 true,表示将响应存储在变量 $response 中,而不是直接输出。

4. 常见 cURL 选项

基础选项
选项描述
CURLOPT_URL设置目标 URL。
CURLOPT_RETURNTRANSFER如果为 true,将响应以字符串形式返回。
CURLOPT_TIMEOUT设置超时时间(秒)。
CURLOPT_USERAGENT设置 User-Agent 请求头。
CURLOPT_FOLLOWLOCATION如果为 true,跟随服务器重定向。
CURLOPT_HTTPHEADER设置自定义 HTTP 请求头。
POST 请求

要发送 POST 请求,需要设置 CURLOPT_POSTCURLOPT_POSTFIELDS

<?php
// 初始化 cURL
$ch = curl_init();// 设置 URL
curl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts");// 设置 POST 方法
curl_setopt($ch, CURLOPT_POST, true);// 设置 POST 数据
curl_setopt($ch, CURLOPT_POSTFIELDS, ['title' => 'foo','body' => 'bar','userId' => 1,
]);// 返回响应
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// 执行请求
$response = curl_exec($ch);// 检查错误
if (curl_errno($ch)) {echo 'cURL Error: ' . curl_error($ch);
} else {echo $response;
}// 关闭 cURL
curl_close($ch);
?>
添加自定义 Header

可以通过 CURLOPT_HTTPHEADER 添加自定义的 HTTP 头部。

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// 设置自定义 Header
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json','Authorization: Bearer YOUR_ACCESS_TOKEN'
]);$response = curl_exec($ch);
if (curl_errno($ch)) {echo 'cURL Error: ' . curl_error($ch);
} else {echo $response;
}
curl_close($ch);
?>
上传文件

上传文件时,使用 CURLOPT_POSTFIELDS,同时借助 PHP 的 CURLFile 类。

<?php
$ch = curl_init();// 设置 URL
curl_setopt($ch, CURLOPT_URL, "https://example.com/upload");// 设置 POST 请求
curl_setopt($ch, CURLOPT_POST, true);// 设置上传文件
curl_setopt($ch, CURLOPT_POSTFIELDS, ['file' => new CURLFile('/path/to/file.jpg', 'image/jpeg', 'file.jpg')
]);// 返回响应
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// 执行请求
$response = curl_exec($ch);
if (curl_errno($ch)) {echo 'cURL Error: ' . curl_error($ch);
} else {echo $response;
}curl_close($ch);
?>

5. 处理 HTTPS 请求

如果目标 URL 是 HTTPS,可能需要额外的配置来处理 SSL 证书验证。

忽略 SSL 验证

虽然不推荐,但可以通过以下选项忽略 SSL 验证:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
指定证书文件
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");

6. cURL 进阶功能

重定向处理

如果服务器返回 301 或 302 重定向,可以设置 CURLOPT_FOLLOWLOCATION

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
保存 Cookie

可以保存和加载服务器返回的 Cookie:

// 保存 Cookie 到文件
curl_setopt($ch, CURLOPT_COOKIEJAR, "/path/to/cookie.txt");// 使用保存的 Cookie
curl_setopt($ch, CURLOPT_COOKIEFILE, "/path/to/cookie.txt");
获取详细信息

通过 curl_getinfo() 获取请求的详细信息:

$info = curl_getinfo($ch);
print_r($info);

7. cURL 错误处理

通过 curl_errno()curl_error() 获取错误信息:

if (curl_errno($ch)) {echo "Error: " . curl_error($ch);
}

8. cURL 多线程并发请求(multi_curl)

cURL 支持同时发起多个请求,通过 curl_multi_init() 来实现。

<?php
// 初始化多个 cURL 会话
$urls = ["https://jsonplaceholder.typicode.com/posts/1","https://jsonplaceholder.typicode.com/posts/2"
];$multiCurl = curl_multi_init();
$handles = [];foreach ($urls as $url) {$ch = curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$handles[] = $ch;curl_multi_add_handle($multiCurl, $ch);
}// 执行并发请求
do {$status = curl_multi_exec($multiCurl, $active);curl_multi_select($multiCurl);
} while ($active && $status == CURLM_OK);// 获取结果
foreach ($handles as $ch) {echo curl_multi_getcontent($ch);curl_multi_remove_handle($multiCurl, $ch);curl_close($ch);
}curl_multi_close($multiCurl);
?>

9. 总结

cURL 是 PHP 中非常灵活的网络请求工具,能满足从简单 GET/POST 请求到复杂并发请求的需求。初学者可以从基础的 GET 和 POST 请求开始,逐渐学习自定义 Header、文件上传等高级用法,最后挑战并发请求。

推荐掌握:

  • 基本操作流程(initsetoptexecclose)。
  • 常用选项如 CURLOPT_POSTFIELDSCURLOPT_HTTPHEADER 等。
  • 处理错误和调试工具如 curl_getinfo()curl_error()

通过实践,你将能轻松应对 RESTful API 调用、数据爬取等网络编程任务!

相关文章:

PHP cURL 函数初学者完全指南

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

C#中的Array数组,List集合和ArrayList集合--07

目录 一.Array数组概念的简单理解 1.数组的初始化 2.数组的长度 3.数组的克隆和复制 4.数组的清空 5.数组的查找 6.数组的逆转 7.数组的拓展和缩减 8.数组的比较 9.数组的合并 10.使用Array类中的静态方法,如Array.Sort,Array.BinarySearch 等 二.Array数组进阶 1.二…...

基于深度学习的视觉检测小项目(十三) 资源文件的生成和调用

在使用 PySide6 进行开发时&#xff0c;管理应用程序的资源&#xff08;如图标、图片、字体、样式表、音视频等&#xff09;是一个常见的任务。PySide6 提供了一个工具 pyside6-rcc&#xff0c;它能够将资源文件&#xff08;.qrc&#xff09;编译成 Python 模块&#xff0c;然后…...

硬件实用技巧:TPS54331DR横杠标识识别1引脚

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/145116969 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

《C++11》nullptr介绍:从NULL说起

在C11之前&#xff0c;我们通常使用NULL来表示空指针。然而&#xff0c;NULL在C中有一些问题和限制&#xff0c;这就是C11引入nullptr的原因。本文将详细介绍nullptr的定义、用法和优点。 1. NULL的问题 在C中&#xff0c;NULL实际上是一个整数0&#xff0c;而不是一个真正的…...

自然语言处理基础:全面概述

自然语言处理基础&#xff1a;全面概述 什么是NLP及其重要性、NLP的核心组件、NLU与NLG、NLU与NLG的集成、NLP的挑战以及NLP的未来 自然语言处理&#xff08;NLP&#xff09;是人工智能&#xff08;AI&#xff09;中最引人入胜且具有影响力的领域之一。它驱动着我们日常使用的…...

网络安全的几种攻击方法

攻击方法 挂马: 就是在别人的网站文件里面放入网页木马或者是将代码潜入到对方正常的网页文件里&#xff0c;以使浏览者中马。 挖洞: 指漏洞挖掘。 加壳: 就是利用特殊的算法&#xff0c;将EXE可执行程序或者DLL动态连接库文件的编码进行改变&#xff08;比如实现压缩、加密&a…...

国内源快速在线安装qt5.15以上版本。(10min安装好)(图文教程)

参考文章&#xff1a;Qt6安装教程——国内源-CSDN博客 1、在国内源上下载qt在线安装工具 NJU Mirror 2、 将下载好的在线安装工具&#xff0c;放到C盘根目录&#xff0c; 2.1 打开windows Powershell&#xff08;WinX&#xff09;&#xff0c;下边那个最好。 输入两条指令&a…...

【pycharm发现找不到python打包工具,且无法下载】

发现找不到python打包工具,且无法下载 解决方法&#xff1a; 第一步&#xff1a;安装distutils&#xff0c;在CMD命令行输入&#xff1a; python -m ensurepip --default-pip第二步&#xff1a;检查和安装setuptools和wheel&#xff1a; python -m pip install --upgrade …...

C++ QT 自绘表盘

文章目录 效果图代码 效果图 代码 代码没什么好说的&#xff0c;直接上源码.h #pragma once#include <QWidget> #include <QPainter> #include <QResizeEvent> #include <QtMath> #include <QCoreApplication>class DialPlateWidget : public …...

数据科学与数据工程:两者的区别与交集

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…...

MAC AndroidStudio模拟器无网络

先确认PC端是正常访问网络的&#xff1b; 模拟器端修改Wifi设置&#xff1a;设置 - 网络和互联网 - WALN设置 按照上图修改&#xff1b; IP设置&#xff1a;从DHCP修改为静态&#xff0c;IP地址&#xff1a;10.0.2.16 &#xff0c;网关&#xff1a;10.0.2.2 &#xff0c; DNS…...

PHP语言的多线程编程

PHP语言的多线程编程 引言 在现代Web开发中&#xff0c;PHP以其简洁和易用性广受欢迎。它常用于构建动态网站和应用程序。然而&#xff0c;PHP本身是单线程的&#xff0c;这意味着它在处理多个任务时可能会受到性能限制。随着互联网的发展&#xff0c;对高并发、高可用性和实…...

当自动包布机遇上Profinet转ModbusTCP网关,“妙啊”,工业智能“前景无限

在自动化控制技术日新月异的当下&#xff0c;Profinet与ModbusTCP这两种协议在工业通信领域占据着举足轻重的地位。ModbusTCP是基于以太网的串行通信协议&#xff0c;而Profinet则是依托工业以太网的现场总线协议。它们在数据传输速度、实时性表现以及兼容性等方面各具特色。不…...

浅析大语言模型安全和隐私保护国内外标准和政策

过去两年&#xff0c;大模型技术已经普及并逐步渗透到各行各业&#xff0c;2025年注定是大模型应用井喷式发展的一年&#xff0c;AI在快速发展的同时&#xff0c;其带来的安全风险也逐渐凸显。人工智能系统的安全性和隐私保护已经成为社会关注的重点。 附下载&#xff1a;600多…...

OpenCV相机标定与3D重建(54)解决透视 n 点问题(Perspective-n-Point, PnP)函数solvePnP()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据3D-2D点对应关系找到物体的姿态。 cv::solvePnP 是 OpenCV 库中的一个函数&#xff0c;用于解决透视 n 点问题&#xff08;Perspective-n-Po…...

Chatper 4: Implementing a GPT model from Scratch To Generate Text

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.1 Coding an LLM architecture4.2 Normalizing activations with layer normalization4.3 Implementing a feed forward network with GELU activations4.4 Adding shortcut connections4.5 Connecting at…...

spring-mvc源码分析v3.3.0

分析下springboot内嵌tomcat启动流程&#xff0c;即springboot-mvc <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.3.0</version> </dependency>环境…...

Rust实现智能助手 - 项目初始化

文章目录 前言环境准备依赖代码运行使用最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;最近准备花一些时间来使用Rust语言实现一个智能助手&#xff0c;希望能够帮助到你。 环境准备 安装Rust语言环境&#xff0c;你可以从官网下载安装包安装。安装Ollama&#xff0c;…...

sparkSQL练习

1.前期准备 &#xff08;1&#xff09;建议先把这两篇文章都看一下吧&#xff0c;然后把这个项目也搞下来 &#xff08;2&#xff09;看看这个任务 &#xff08;3&#xff09;score.txt student_id,course_code,score 108,3-105,99 105,3-105,88 107,3-105,77 105,3-245,87 1…...

PPT转图片拼贴工具 v1.0

软件介绍 这个软件的作用就是将单个PPT的每一页转换为单独的图片&#xff0c;然后将图片进行拼接起来。 但是我没有还没有解决一次性处理多个文件。 效果展示如下&#xff1a; 软件安装 软件源码 import os import re import win32com.client from PIL import Imagedef con…...

【笔记】旧版MSYS2 环境中 Rust 升级问题及解决过程

下面是一份针对在旧版 MSYS2&#xff08;安装在 D 盘&#xff09;中&#xff0c;基于 Python 3.11 的 Poetry 虚拟环境下升级 Rust 的处理过程笔记&#xff08;适用于 WIN 系统 SUNA 人工智能代理开源项目部署要求&#xff09;的记录。 MSYS2 旧版环境中 Rust 升级问题及解决过…...

数据结构之LinkedList

系列文章目录 数据结构之ArrayList-CSDN博客 目录 系列文章目录 前言 一、模拟实现链表 1. 遍历链表 2. 插入节点 3. 删除节点 4. 清空链表 二、链表的常见操作 1. 反转链表 2. 返回链表的中间节点 3. 链表倒数第 k 个节点 4. 合并两个有序链表 5. 分割链表 6. 判…...

微信小程序动态效果实战指南:从悬浮云朵到丝滑列表加载

小红书爆款交互设计解析&#xff0c;附完整代码&#xff01; &#x1f525; 一、为什么动态效果是小程序的关键竞争力&#xff1f; 用户留存提升&#xff1a;数据显示&#xff0c;86.3%的微商从业者依赖微信小程序&#xff0c;而动态效果能显著降低跳出率。技术赋能体验&#…...

如何防止服务器被用于僵尸网络(Botnet)攻击 ?

防止服务器被用于僵尸网络&#xff08;Botnet&#xff09;攻击是关键的网络安全措施之一。僵尸网络是黑客利用大量被感染的计算机、服务器或物联网设备来发起攻击的网络。以下是关于如何防止服务器被用于僵尸网络攻击的技术文章&#xff1a; 防止服务器被用于僵尸网络&#xff…...

从混乱到秩序:探索管理系统如何彻底改变工作流程

内容摘要 在许多企业与组织中&#xff0c;工作流程混乱是阻碍发展的“绊脚石”。员工们常常被繁琐的步骤、模糊的职责和沟通不畅等问题搞得焦头烂额&#xff0c;工作效率低下&#xff0c;错误频发。而与之形成鲜明对比的是&#xff0c;一些引入了先进管理系统的团队&#xff0…...

数字证书_CA_详解

目录 一、数字证书简介 二、 CA&#xff08;证书颁发机构&#xff09; (一) 证书链&#xff08;信任链&#xff09; 1. 根证书 2. 中间证书 3. 网站证书 (二) 抓包软件的证书链与信任机制 1. 抓包通信流程 2. 证书链伪造与信任验证流程 (三) 关于移动设备的CA 一、数…...

JUnit​​ 和 ​​Mockito​​ 的详细说明及示例,涵盖核心概念、常用注解、测试场景和实战案例。

一、JUnit 详解 1. JUnit 核心概念 ​​测试类​​&#xff1a;以 Test 结尾的类&#xff08;或通过 Test 注解标记的方法&#xff09;。​​断言&#xff08;Assertions&#xff09;​​&#xff1a;验证预期结果与实际结果是否一致&#xff08;如 assertEquals()&#xff0…...

【JVM】Java虚拟机(一)——内存结构

目录 一、简介 二、程序计数器 三、虚拟机栈 栈帧结构&#xff1a; 特点&#xff1a; 四、本地方法栈 特点&#xff1a; 五、堆 堆结构&#xff1a; 特点&#xff1a; 对象分配过程&#xff1a; 六、方法区 方法区结构&#xff1a; 特点&#xff1a; 运行时常量池…...

UCRT 和 MSVC 的区别(Windows 平台上 C/C++ 开发相关)

UCRT 和 MSVC 是与 Windows 平台上 C/C 开发相关的两个重要概念&#xff0c;它们都属于 Microsoft 的开发工具链的一部分。下面详细解释它们的含义、区别以及用途。 一、UCRT&#xff08;Universal C Runtime&#xff09; 1. 含义&#xff1a; UCRT&#xff08;Universal C …...