PHP cURL GET and POST Examples

阅读 15

06-22 06:00

以下是一个简单的 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:设置请求 URL
  • CURLOPT_RETURNTRANSFER:设置 true 将返回结果作为字符串返回
  • CURLOPT_POST:设置为 true 时启用 POST 请求
  • CURLOPT_POSTFIELDS:POST 数据(可以是数组或 URL 编码字符串)
  • CURLOPT_HTTPHEADER:设置 HTTP 头信息
  • CURLOPT_SSL_VERIFYPEER:设置为 false 可跳过 SSL 证书验证(仅测试环境使用)

常见问题排查:

  1. 请求失败:检查 URL 格式(需包含 http://https://
  2. SSL 证书问题:测试时可添加 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  3. 超时设置:添加 curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  4. 获取响应信息

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$totalTime = curl_getinfo($ch, CURLINFO_TOTAL_TIME);

建议使用 Postman 先测试 API,再转换为 cURL 代码。

精彩评论(0)

0 0 举报