news 2026/6/11 1:16:30

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
蓝易云 - PHP用CURL发送Content-type为application/json的POST请求方法

下面给你一套在 PHP 里用 cURL 发送 Content-Type: application/json 的 POST 请求的“标准企业写法”:结构清晰、可复用、可排障,适合直接丢进生产代码库🙂


一、最关键的点(先把坑堵死)

  1. 请求体必须是 JSON 字符串:用json_encode()生成,而不是http_build_query()

  2. 必须显式设置 Content-Type:Content-Type: application/json; charset=utf-8

  3. 建议带上 Content-Length:部分网关/安全设备更“挑剔”。

  4. 服务端返回如果是 JSON,建议设置 Accept: application/json,便于协商。


二、可直接复用的完整示例(含超时、错误处理、响应解析)✅

<?php $url = "https://api.example.com/v1/order/create"; $payload = [ "user_id" => 10001, "amount" => 99.50, "remark" => "test", ]; // 1) 将数组编码成 JSON 字符串(这是 application/json 的核心) $jsonBody = json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); if ($jsonBody === false) { throw new RuntimeException("JSON 编码失败: " . json_last_error_msg()); } $ch = curl_init($url); // 2) 关键请求头:明确告诉服务端“我发的是 JSON”,也表明“我期望 JSON 响应” $headers = [ "Content-Type: application/json; charset=utf-8", "Accept: application/json", "Content-Length: " . strlen($jsonBody), ]; curl_setopt_array($ch, [ CURLOPT_POST => true, // 使用 POST 方法 CURLOPT_POSTFIELDS => $jsonBody, // POST 请求体:必须是 JSON 字符串 CURLOPT_HTTPHEADER => $headers, // 设置请求头 CURLOPT_RETURNTRANSFER => true, // 返回响应内容为字符串(不直接输出) CURLOPT_CONNECTTIMEOUT => 5, // 连接超时(秒) CURLOPT_TIMEOUT => 15, // 总超时(秒) CURLOPT_FAILONERROR => false, // 不让 4xx/5xx 直接导致 curl_exec 返回 false(方便读响应体排错) ]); $responseBody = curl_exec($ch); // 3) 网络层错误:DNS、连接失败、TLS 握手失败等 if ($responseBody === false) { $errno = curl_errno($ch); $error = curl_error($ch); curl_close($ch); throw new RuntimeException("cURL 请求失败 [{$errno}]: {$error}"); } // 4) 协议层信息:HTTP 状态码、Content-Type 等 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); curl_close($ch); // 5) 按需解析 JSON 响应(如果服务端确实返回 JSON) $data = null; if (is_string($contentType) && stripos($contentType, "application/json") !== false) { $data = json_decode($responseBody, true); } // 6) 业务层处理示例:按 HTTP 状态码做分流 if ($httpCode >= 200 && $httpCode < 300) { // 成功:优先用解析后的数组;解析失败则回退原始响应 var_dump($data ?? $responseBody); } else { // 失败:把响应体也带上,便于排查(网关经常会回 JSON 错误详情) throw new RuntimeException("HTTP 请求失败,状态码={$httpCode},响应={$responseBody}"); }

逐段解释(对应你最常踩的点)

  • json_encode(...):把 PHP 数组变成 JSON 字符串,这一步决定服务端能不能按 JSON 解析。

  • CURLOPT_POSTFIELDS:你传进去什么,HTTP Body 就是什么。要发 JSON,就必须传 JSON 字符串。

  • CURLOPT_HTTPHEADER:这里把 Content-Type 定死为application/json,否则服务端可能按表单解析导致字段丢失。

  • CURLOPT_RETURNTRANSFER:拿到响应字符串,方便你写日志、做重试、做告警。

  • CURLINFO_HTTP_CODE:把网络成功与业务成功分开看,避免“curl 成功但业务失败还当成功”。🙂


三、工作流程图(你可以当排障 checklist)

准备 payload(数组) ↓ <span style="color:red">json_encode</span> → 得到 JSON 字符串 ↓ 设置请求头:<span style="color:red">Content-Type: application/json</span> ↓ cURL POST 发送(超时、返回响应) ↓ 检查:curl_exec 是否 false(网络层) ↓ 检查:HTTP 状态码(协议层) ↓ 按 Content-Type 判断是否 json_decode(业务层)

四、原理/参数对照表(把配置变成可控资产)

推荐值作用常见问题
Content-Typeapplication/json; charset=utf-8声明 Body 格式不设置会被当表单解析
CURLOPT_POSTFIELDSJSON 字符串实际请求体传数组会被转成a=1&b=2
Acceptapplication/json期望响应格式响应非 JSON 时解析失败
CONNECTTIMEOUT3~5s连接超时DNS/TLS 卡住拖垮线程
TIMEOUT10~30s总超时无上限会把 PHP-FPM 拖死

你拿去直接用的“结论”

只要做到两件事:
1)json_encode()得到 JSON Body;
2)请求头带上Content-Type: application/json
再配好超时与错误分层(网络/HTTP/业务),这就是一套可在生产稳定跑的写法。🚀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:23:42

TensorRT推理引擎的安全性与稳定性分析

TensorRT推理引擎的安全性与稳定性分析 在现代AI系统部署中&#xff0c;一个常见的挑战是&#xff1a;模型在实验室里表现优异&#xff0c;但一旦上线就出现延迟波动、显存溢出甚至输出不一致的问题。尤其是在医疗影像诊断、自动驾驶决策这类安全关键场景下&#xff0c;哪怕一次…

作者头像 李华
网站建设 2026/6/10 12:23:48

从学术研究到工业部署:TensorRT的关键作用

从学术研究到工业部署&#xff1a;TensorRT的关键作用 在自动驾驶的感知系统中&#xff0c;每毫秒都关乎安全&#xff1b;在电商推荐引擎背后&#xff0c;成千上万的用户请求必须在百毫秒内响应。然而&#xff0c;一个在论文中表现惊艳的深度学习模型&#xff0c;一旦进入真实生…

作者头像 李华
网站建设 2026/6/10 12:23:47

如何构建可持续演进的TensorRT推理体系?

如何构建可持续演进的TensorRT推理体系&#xff1f; 在AI模型从实验室走向产线的过程中&#xff0c;一个反复出现的问题是&#xff1a;为什么训练时表现优异的模型&#xff0c;部署后却“跑不动”&#xff1f;延迟高、吞吐低、显存爆满——这些问题在边缘设备或高并发服务中尤为…

作者头像 李华
网站建设 2026/6/10 14:27:37

大规模并发请求下的TensorRT性能表现

大规模并发请求下的TensorRT性能表现 在现代AI服务的生产环境中&#xff0c;一个常见的挑战浮出水面&#xff1a;如何在成千上万的并发请求下&#xff0c;依然保持毫秒级响应&#xff1f;无论是视频平台实时分析每一帧画面&#xff0c;还是电商平台瞬间处理数万用户的个性化推荐…

作者头像 李华
网站建设 2026/6/10 12:24:43

视觉大模型推理瓶颈破解:TensorRT优化方案

视觉大模型推理瓶颈破解&#xff1a;TensorRT优化方案 在自动驾驶的感知系统中&#xff0c;每毫秒都至关重要——一个 80ms 的延迟可能意味着车辆多行驶了 2 米&#xff1b;在工业质检产线上&#xff0c;30FPS 是硬性要求&#xff0c;慢一帧就可能导致漏检。然而现实是&#xf…

作者头像 李华
网站建设 2026/6/10 12:23:43

芒格的“远离“策略:知道自己不知道什么

芒格的"远离"策略&#xff1a;知道自己不知道什么关键词&#xff1a;芒格、远离策略、认知边界、投资决策、风险规避、能力圈、不确定性摘要&#xff1a;本文深入探讨了芒格提出的“远离”策略&#xff0c;即明确知道自己不知道什么。通过对这一策略的背景介绍&#…

作者头像 李华