laravel 11推荐使用http门面发送json请求,自动处理编码、content-type和响应解析;必要时可用原生curl手动设置json_encode、http头及curlopt_returntransfer。

在 Laravel 11 中,不推荐直接用原生 cURL 发送 JSON 请求 —— 官方更倾向使用内置的 Http 门面(基于 Guzzle),既安全又简洁。但如果你有特殊需求(如绕过 Guzzle、调试底层行为、或集成遗留 cURL 逻辑),也可以手动调用 PHP 的 curl_* 函数发送 JSON 数据。下面分两种方式说明:
✅ 推荐方式:用 Laravel Http 门面发 JSON(简单可靠)
这是 Laravel 11 默认且最稳妥的做法,自动处理 JSON 编码、Content-Type、响应解析等:
- 确保已安装
guzzlehttp/guzzle(Laravel 11 默认已包含) - 发送 POST 请求并自动序列化数组为 JSON:
// 控制器或服务中
use Illuminate\Support\Facades\Http;
$response = Http::asJson()
->post('https://api.example.com/users', [
'name' => 'Taylor',
'email' => 'taylor@example.com',
'role' => 'admin'
]);
if ($response->successful()) {
$data = $response->json(); // 自动解码 JSON 响应
} else {
\Log::error('API error:', $response->body());
}
注意:asJson() 会自动设置 Content-Type: application/json 并调用 json_encode();不需要手动 json_encode 参数。
父母的功课——育儿心理学对话支持技能(心虫增强版)。提供结构化对话、情绪识别、场景匹配与安全检测;可选Python脚本(scripts/)在SKILL_DIR/data/本地存储评估历史、洞察与会话状态,不对外传输。核心路径:觉察(看见防御)→接纳(慈悲是……
⚠️ 手动 cURL 方式(仅限必要场景)
若必须用原生 cURL(例如定制超低层选项、禁用 SSL 验证、复用句柄等),请按以下步骤操作:
- 用
json_encode()将数据转为字符串 - 设置
CURLOPT_POSTFIELDS为该 JSON 字符串 - 显式设置
Content-Type: application/json请求头 - 启用
CURLOPT_RETURNTRANSFER获取响应内容而非直接输出
$data = ['name' => 'Taylor', 'email' => 'taylor@example.com'];
$jsonPayload = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.example.com/users');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonPayload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonPayload),
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 可选:跳过 SSL 验证(仅开发环境!)
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($response !== false && $httpCode >= 200 && $httpCode
? 关键细节提醒
-
JSON 编码失败要检查:确保传入
json_encode()的数据不含资源、闭包或不可序列化对象;可用json_last_error()排查 - 中文等 UTF-8 内容无需额外处理,只要 PHP 字符串本身是 UTF-8(Laravel 默认满足)
-
不要漏设
Content-Length:虽然多数服务能容忍,但规范做法是显式提供 -
错误处理不能省略:cURL 可能返回
false,需用curl_error()和curl_errno()捕获底层错误
? 补充:用 Guzzle 客户端(更灵活控制)
如果需要比 Http 门面更强的定制能力(如中间件、重试策略、连接池),可直接使用 Guzzle 实例:
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.example.com/users', [
'json' => ['name' => 'Taylor', 'email' => 'taylor@example.com'], // 自动编码+设头
'timeout' => 10,
]);
$data = $response->getBody()->getContents(); // 或 $response->json()
这种写法比裸 cURL 更安全,又比 Http 门面更底层可控。










