HoRain云--PHP用CURL发送Content-type为application/json的POST请求方法

  

🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

基础代码实现

关键配置说明

常见问题处理

1. 数据编码问题

2. 添加认证信息

3. 处理服务器响应

安全建议

完整封装函数示例


img

在 PHP 中使用 cURL 发送 application/json 类型的 POST 请求,需明确设置请求头和 JSON 数据体。以下是具体方法和完整示例:


基础代码实现

<?php
// 目标 URL
$url = 'https://api.example.com/endpoint';

// 准备要发送的数据(关联数组)
$data = [
    'name' => 'John Doe',
    'email' => 'john@example.com',
    'age' => 30
];

// 将数据转换为 JSON 字符串
$jsonData = json_encode($data);

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

// 配置 cURL 选项
curl_setopt_array($ch, [
    CURLOPT_POST => true,                // 启用 POST
    CURLOPT_POSTFIELDS => $jsonData,      // 设置 JSON 数据体
    CURLOPT_HTTPHEADER => [              // 设置请求头
        'Content-Type: application/json',
        'Content-Length: ' . strlen($jsonData)
    ],
    CURLOPT_RETURNTRANSFER => true,      // 返回响应结果(不直接输出)
    CURLOPT_SSL_VERIFYPEER => false      // 关闭 SSL 验证(测试环境用)
]);

// 执行请求并获取响应
$response = curl_exec($ch);

// 检查错误
if (curl_errno($ch)) {
    echo 'cURL Error: ' . curl_error($ch);
}

// 关闭 cURL 资源
curl_close($ch);

// 输出服务器响应
echo $response;
?>

关键配置说明

配置项作用说明
CURLOPT_POST明确指定为 POST 方法(或改用 CURLOPT_CUSTOMREQUEST => 'POST'
CURLOPT_POSTFIELDS必须传递 JSON 字符串(若传递数组会自动转为 multipart/form-data
Content-Type强制声明内容类型为 application/json
Content-Length可选但推荐,明确数据长度
CURLOPT_RETURNTRANSFER设为 true 以将响应保存到变量(否则直接输出)

常见问题处理

1. 数据编码问题
// 处理特殊字符(如中文)
$jsonData = json_encode($data, JSON_UNESCAPED_UNICODE);
2. 添加认证信息
// 在请求头中添加 Token
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Bearer your_token_here'
]);
3. 处理服务器响应
// 解析 JSON 响应
$responseData = json_decode($response, true);
if (json_last_error() === JSON_ERROR_NONE) {
    print_r($responseData);
} else {
    echo "响应非 JSON 格式: " . $response;
}

安全建议

  1. 生产环境启用 SSL 验证
    移除 CURLOPT_SSL_VERIFYPEER => false 或设为 true(需配置证书)

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');
    
  2. 超时设置
    添加超时限制防止长时间阻塞:

    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 10 秒超时
    

完整封装函数示例

function sendJsonPostRequest($url, $data, $headers = []) {
    $jsonData = json_encode($data);
    $ch = curl_init($url);
    $defaultHeaders = [
        'Content-Type: application/json',
        'Content-Length: ' . strlen($jsonData)
    ];
    $finalHeaders = array_merge($defaultHeaders, $headers);
    
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $jsonData,
        CURLOPT_HTTPHEADER => $finalHeaders,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_CAINFO => '/path/to/cacert.pem'
    ]);

    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        throw new Exception('cURL Error: ' . curl_error($ch));
    }
    curl_close($ch);
    return json_decode($response, true) ?: $response;
}

// 调用示例
try {
    $result = sendJsonPostRequest('https://api.example.com', ['key' => 'value'], [
        'X-Custom-Header: test'
    ]);
    print_r($result);
} catch (Exception $e) {
    echo $e->getMessage();
}

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值