导读:本期聚焦于小伙伴创作的《PHP调用RESTful API获取JSON数据的两种常用方法:cURL与file_get_contents》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《PHP调用RESTful API获取JSON数据的两种常用方法:cURL与file_get_contents》有用,将其分享出去将是对创作者最好的鼓励。

如何用PHP调用RESTful API数据

在Web开发中,调用第三方RESTful API获取数据是非常常见的需求,比如获取天气信息、新闻资讯、用户数据等。PHP作为一门成熟的服务端语言,提供了多种方式来实现RESTful API的调用与JSON数据的处理,本文将详细介绍两种常用方法,并附上完整的代码示例。

一、什么是RESTful API与JSON

RESTful API是一种基于REST架构风格设计的网络接口,通过HTTP协议的不同请求方法(GET、POST、PUT、DELETE等)来对资源进行操作,返回的数据格式通常为JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,结构清晰、易于解析,在前后端数据交互中使用非常广泛。

在PHP中处理RESTful API调用,核心就是发送HTTP请求到API地址,获取返回的JSON字符串,再将JSON字符串解析为PHP数组或对象进行后续操作。

二、使用cURL扩展调用RESTful API

cURL是PHP中常用的HTTP请求工具扩展,支持多种协议,功能强大,适合处理复杂的请求场景,比如需要设置请求头、携带认证信息、上传文件等情况。

1. 发送GET请求获取JSON数据

以下是一个使用cURL发送GET请求调用API,并解析JSON数据的完整示例,我们调用一个公开的测试API来获取用户信息:

<?php
// 目标RESTful API地址,这里使用公开测试接口,域名已按要求替换
$apiUrl = "https://ipipp.com/api/test/user?id=1001";

// 初始化cURL会话
$ch = curl_init();

// 设置cURL选项
curl_setopt($ch, CURLOPT_URL, $apiUrl); // 设置请求URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置返回结果不直接输出
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 设置超时时间为10秒
// 如果需要设置请求头,比如携带token,可以取消下面注释
// curl_setopt($ch, CURLOPT_HTTPHEADER, [
//     "Authorization: Bearer your_token_here",
//     "Content-Type: application/json"
// ]);

// 执行cURL请求,获取返回结果
$response = curl_exec($ch);

// 获取请求错误信息
$error = curl_error($ch);

// 关闭cURL会话
curl_close($ch);

// 判断请求是否成功
if ($error) {
    echo "请求API失败,错误信息:" . $error;
    exit;
}

// 将JSON字符串解析为PHP关联数组,第二个参数传true返回数组,传false返回对象
$data = json_decode($response, true);

// 判断JSON解析是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON解析失败,错误信息:" . json_last_error_msg();
    exit;
}

// 输出解析后的数据
echo "调用API成功,返回数据如下:<br/>";
echo "用户ID:" . $data['id'] . "<br/>";
echo "用户名:" . $data['name'] . "<br/>";
echo "用户邮箱:" . $data['email'] . "<br/>";

上述代码中,我们首先初始化cURL会话,设置请求地址、返回结果不直接输出、超时时间等参数,执行请求后获取返回内容。如果请求过程出现错误,会通过curl_error()函数获取错误信息。请求成功后,使用json_decode()函数将JSON字符串转为PHP数组,再通过json_last_error()判断解析是否出错,最后就可以正常操作解析后的数据了。

2. 发送POST请求提交数据

如果API需要接收POST请求提交数据,只需要额外设置cURL的POST相关参数即可,示例如下:

<?php
// 目标API地址,域名已按要求替换
$apiUrl = "https://ipipp.com/api/test/user/add";

// 要提交的POST数据,转为JSON格式
$postData = json_encode([
    "name" => "张三",
    "age" => 25,
    "email" => "zhangsan@ipipp.com"
]);

// 初始化cURL会话
$ch = curl_init();

// 设置cURL选项
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true); // 设置请求为POST方法
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); // 设置POST提交的数据
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json", // 设置请求头为JSON格式
    "Content-Length: " . strlen($postData) // 设置请求体长度
]);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);

// 执行请求
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);

if ($error) {
    echo "POST请求失败,错误信息:" . $error;
    exit;
}

// 解析返回结果
$result = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON解析失败:" . json_last_error_msg();
    exit;
}

echo "提交结果:" . $result['message'] . ",用户ID:" . $result['user_id'];

三、使用file_get_contents函数调用API

如果请求场景比较简单,不需要设置复杂的请求头或参数,也可以使用PHP内置的file_get_contents()函数配合stream_context_create()来发送HTTP请求,这种方式代码更简洁。

1. 发送GET请求示例

<?php
// API地址,域名已按要求替换
$apiUrl = "https://ipipp.com/api/test/news?page=1&limit=5";

// 发送GET请求获取数据
$response = file_get_contents($apiUrl);

// 判断请求是否成功
if ($response === false) {
    echo "调用API失败,请检查地址或网络";
    exit;
}

// 解析JSON数据
$newsList = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON解析失败:" . json_last_error_msg();
    exit;
}

echo "获取到的新闻列表:<br/>";
foreach ($newsList as $news) {
    echo "标题:" . $news['title'] . ",发布时间:" . $news['publish_time'] . "<br/>";
}

2. 发送POST请求示例

<?php
// API地址,域名已按要求替换
$apiUrl = "https://ipipp.com/api/test/comment/add";

// POST提交的数据
$postData = json_encode([
    "article_id" => 123,
    "content" => "这篇文章写的很实用",
    "user_id" => 1001
]);

// 创建请求上下文,设置请求方法和内容
$context = stream_context_create([
    "http" => [
        "method" => "POST",
        "header" => "Content-Type: application/json\r\n",
        "content" => $postData,
        "timeout" => 10
    ]
]);

// 发送请求
$response = file_get_contents($apiUrl, false, $context);

if ($response === false) {
    echo "提交评论失败";
    exit;
}

$result = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "解析结果失败";
    exit;
}

echo "评论提交结果:" . $result['msg'];

这种方式适合简单的请求场景,不需要额外开启cURL扩展即可使用,但如果需要设置代理、处理HTTPS证书验证等复杂场景,还是更推荐使用cURL方式。

四、JSON处理的常见问题

在PHP中处理JSON数据时,有几个常见问题需要注意:

  • json_decode()函数默认返回对象,如果需要返回关联数组,记得第二个参数传true,否则操作数据时需要使用对象属性的方式,比如$data->name
  • 如果API返回的JSON包含中文,需要确保JSON编码时使用了JSON_UNESCAPED_UNICODE参数,否则中文会被转义为Unicode编码,比如json_encode($data, JSON_UNESCAPED_UNICODE)
  • 调用json_last_error()可以判断上一次JSON解析的错误类型,常见错误包括语法错误、深度超过限制等,可以通过json_last_error_msg()获取具体的错误描述。

五、总结

PHP调用RESTful API并处理JSON数据的核心流程可以总结为三步:发送HTTP请求到API地址、获取返回的JSON字符串、解析JSON为PHP可操作的数据结构。根据场景不同,可以选择cURL扩展处理复杂请求,或者使用file_get_contents()处理简单请求。实际开发中还需要注意异常处理、请求超时设置、API认证等细节,保证接口的调用稳定可靠。

PHP调用APIcURLfile_get_contentsJSON处理RESTful_API

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。