在 PHP 开发中,与外部服务器进行通信是常见的需求,例如调用 API 接口、获取远程网页内容、发送 HTTP 请求等。PHP 提供了 cURL 扩展来实现这些功能,而 curl_exec() 函数是其中最核心的执行函数之一。它用于执行一个已配置好的 cURL 会话,并返回服务器的响应结果。本文将详细介绍 curl_exec() 函数的核心功能、使用步骤,并提供多个示例代码,帮助开发者深入理解其工作原理和实际应用。
curl_exec() 是 PHP 中 cURL 扩展提供的函数之一,其主要作用是执行一个已经初始化并配置好的 cURL 会话。该函数会根据之前设置的选项(如 URL、请求方法、请求头等)向目标服务器发起请求,并返回服务器的响应内容。
其基本语法如下:
bool curl_exec ( resource $ch )
$ch:一个由 curl_init() 创建并配置的 cURL 句柄;
返回值:成功时返回服务器的响应内容(字符串),失败时返回 FALSE。
curl_exec() 是 cURL 流程中的执行阶段,它不会直接控制请求的细节,而是依赖于之前调用的 curl_setopt() 函数设置的选项。
使用 curl_exec() 的完整流程包括以下几个步骤:
初始化 cURL 会话
使用 curl_init() 函数创建一个 cURL 句柄:
$ch = curl_init();
设置 cURL 选项
使用 curl_setopt() 函数设置请求的参数,例如目标 URL、请求方法、是否返回响应内容等:
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
执行 cURL 请求
使用 curl_exec() 函数发送请求并获取响应:
$response = curl_exec($ch);
检查执行是否成功
如果返回值为 FALSE,表示请求失败,可以通过 curl_error() 获取错误信息:
if ($response === FALSE) {
echo 'cURL 错误: ' . curl_error($ch);
}
关闭 cURL 会话
使用 curl_close() 函数关闭 cURL 句柄,释放资源:
curl_close($ch);
这一流程构成了 PHP 中使用 cURL 发送请求的标准模式。
在调用 curl_exec() 之前,通常需要使用 curl_setopt() 设置多个选项来控制请求行为。以下是一些常见的设置选项:
CURLOPT_URL:指定请求的目标 URL。
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/data");
CURLOPT_RETURNTRANSFER:是否将响应作为字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
CURLOPT_POST:启用 POST 请求。
curl_setopt($ch, CURLOPT_POST, true);
CURLOPT_POSTFIELDS:设置 POST 请求的请求体数据。
curl_setopt($ch, CURLOPT_POSTFIELDS, "param1=value1¶m2=value2");
CURLOPT_HEADER:是否包含响应头信息。
curl_setopt($ch, CURLOPT_HEADER, false);
CURLOPT_HTTPHEADER:自定义请求头信息。
curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Content-Type: application/json",
"Authorization: Bearer your_token"
]);
CURLOPT_FOLLOWLOCATION:是否自动跟随重定向。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
CURLOPT_TIMEOUT:设置请求的最大执行时间(秒)。
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
CURLOPT_SSL_VERIFYPEER:是否验证 SSL 证书(用于 HTTPS 请求)。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
CURLOPT_USERAGENT:设置请求的 User-Agent。
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0");
这些选项的设置直接影响 curl_exec() 的执行方式和返回结果,因此在实际使用中非常重要。
以下是一些常见的使用 curl_exec() 的示例代码,涵盖 GET 请求、POST 请求、JSON 数据提交、文件上传等场景。
GET 请求获取网页内容
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response === FALSE) {
echo "请求失败: " . curl_error($ch);
}
curl_close($ch);
echo $response;
POST 请求提交表单数据
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/login");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=admin&password=123456");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
发送 JSON 数据的 POST 请求
$data = ['name' => 'John', 'age' => 30];
$json_data = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/user");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Content-Type: application/json",
"Content-Length: " . strlen($json_data)
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
上传文件(multipart/form-data 格式)
$post_data = ['file' => new CURLFile('path/to/file.jpg')];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/upload");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
带 Cookie 的请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIE, "PHPSESSID=12345");
$response = curl_exec($ch);
curl_close($ch);
echo $response;
HTTPS 请求(忽略 SSL 验证)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://secure.example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 忽略 SSL 证书验证
$response = curl_exec($ch);
curl_close($ch);
echo $response;
获取响应头信息
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true); // 包含响应头
$response = curl_exec($ch);
curl_close($ch);
echo $response;
curl_exec() 是 PHP 中用于执行 cURL 请求的核心函数,结合 curl_setopt() 可以实现 GET、POST、文件上传、JSON 通信等多种网络请求。掌握其使用方法和配置选项,是构建 API 调用、数据抓取、远程通信等功能的基础。
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
通过出发地、目的地、出发日期等信息查询航班信息。
通过站到站查询火车班次时刻表等信息,同时已集成至聚合MCP Server。火车票订票MCP不仅能赋予你的Agent火车时刻查询,还能支持在线订票能力。
通过车辆vin码查询车辆的过户次数等相关信息
验证银行卡、身份证、姓名、手机号是否一致并返回账户类型
查询个人是否存在高风险行为