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

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 调用、数据爬取等网络编程任务!


http://www.kler.cn/a/500836.html

相关文章:

  • 51单片机 AT24C02(I2C总线)
  • 在php中,Fiber、Swoole、Swow这3个协程都是如何并行运行的?
  • CTFshow—文件包含
  • 大模型训练(2):内存开销
  • 计算机网络(二)——物理层和数据链路层
  • Zookeeper 集群安装
  • 从取证视角看虚拟化——以 ESXi 为例
  • 软件测试预备知识④—NTFS权限管理、磁盘配额与文件共享
  • Vue 中,使用 v-for 和 v-if 在同一个元素上时,出现报错,怎么解决
  • 大语言模型训练的数据集从哪里来?
  • 在Node.js中借助腾讯云SDK调用混元大模型
  • Github 2025-01-10 Java开源项目日报Top8
  • Oracle 创建index时 自动收集index 统计信息 但partition index要特别注意
  • file与io流(2)
  • Linux下部署Redis(本地部署超详细)
  • 13. 罗马数字转整数
  • TypeScript Jest 单元测试 搭建
  • 使用Python和Neo4j驱动程序来实现小规模数据的CSV导入
  • 深入Android架构(从线程到AIDL)_22 IPC的Proxy-Stub设计模式04
  • GPT大模型下,如何实现网络自主防御
  • Python对接GitHub:详细操作指南
  • Docker与微服务实战2-基础篇
  • 【人工智能语音识别】——深入详解人工智能语音信号处理:理解语音信号的特征提取与表示
  • hive3后创建表默认是外部表问题
  • Spring整合SpringMVC
  • 电商项目-基于ElasticSearch实现商品搜索功能(四)