以下是一个简单的 PHP cURL 示例代码,包含 GET 和 POST 两种请求方式的演示:
1. 基础 GET 请求
<?php
// 初始化 cURL
$ch = curl_init();
// 设置请求 URL
curl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts/1");
// 要求返回数据而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行请求并获取响应
$response = curl_exec($ch);
// 检查错误
if (curl_errno($ch)) {
echo 'cURL 错误: ' . curl_error($ch);
} else {
// 解析 JSON 响应
$data = json_decode($response, true);
print_r($data);
}
// 关闭 cURL 资源
curl_close($ch);
?>
2. POST 请求示例
<?php
// 初始化 cURL
$ch = curl_init();
// POST 数据
$postData = [
'title' => '测试标题',
'body' => '测试内容',
'userId' => 1
];
// 设置请求 URL
curl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts");
// 设置为 POST 请求
curl_setopt($ch, CURLOPT_POST, true);
// 设置 POST 数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
// 要求返回数据
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行请求
$response = curl_exec($ch);
// 检查错误
if (curl_errno($ch)) {
echo 'cURL 错误: ' . curl_error($ch);
} else {
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo "状态码: $statusCode\n";
$data = json_decode($response, true);
print_r($data);
}
// 关闭资源
curl_close($ch);
?>
3. 带 Header 的请求
<?php
$ch = curl_init();
// 设置 URL
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/data");
// 自定义 Header
$headers = [
'Authorization: Bearer YOUR_ACCESS_TOKEN',
'Content-Type: application/json'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// 返回结果不直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行请求
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo '错误: ' . curl_error($ch);
} else {
echo "响应: \n" . $response;
}
curl_close($ch);
?>
4. 带 JSON 数据的 POST 请求
<?php
$ch = curl_init();
$payload = json_encode([
'name' => 'Alice',
'email' => 'alice@example.com'
]);
curl_setopt_array($ch, [
CURLOPT_URL => "https://api.example.com/users",
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Content-Length: ' . strlen($payload)
]
]);
$response = curl_exec($ch);
if(curl_errno($ch)) {
echo '错误: ' . curl_error($ch);
} else {
echo "服务器响应: \n";
print_r(json_decode($response));
}
curl_close($ch);
?>
关键 cURL 选项说明:
CURLOPT_URL
:设置请求 URLCURLOPT_RETURNTRANSFER
:设置true
将返回结果作为字符串返回CURLOPT_POST
:设置为true
时启用 POST 请求CURLOPT_POSTFIELDS
:POST 数据(可以是数组或 URL 编码字符串)CURLOPT_HTTPHEADER
:设置 HTTP 头信息CURLOPT_SSL_VERIFYPEER
:设置为false
可跳过 SSL 证书验证(仅测试环境使用)
常见问题排查:
- 请求失败:检查 URL 格式(需包含
http://
或https://
) - SSL 证书问题:测试时可添加
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- 超时设置:添加
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
- 获取响应信息:
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$totalTime = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
建议使用 Postman 先测试 API,再转换为 cURL 代码。