You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中使用Curl发起请求时如何仅获取响应体内容

问题解决方案

根本原因

你设置了CURLOPT_HEADER参数为true,该配置项的作用是让curl_exec()返回的结果同时包含HTTP响应头和响应体内容,所以会出现头信息和JSON数据拼接的情况。

修复方案

方案1(最简单):关闭响应头返回

将代码中对应行的配置值改为false即可:

// 原代码
curl_setopt($crl, CURLOPT_HEADER, true);
// 修改为
curl_setopt($crl, CURLOPT_HEADER, false);

修改后curl_exec()只会返回接口返回的JSON内容,直接调用json_decode()就能正常解析。

方案2(保留响应头用于校验,适用于对接银行等需要验头的场景)

如果你需要保留响应头做合法性校验(比如校验响应状态码、安全头信息等),不需要修改CURLOPT_HEADER配置,在获取返回结果后手动截取响应体即可:

$rest = curl_exec($crl);

if ($rest === false)
{
    print_r('Curl error: ' . curl_error($crl));
} else {
    // 获取响应头的字节长度
    $headerSize = curl_getinfo($crl, CURLINFO_HEADER_SIZE);
    // 截取响应体部分
    $body = substr($rest, $headerSize);
    $data = json_decode($body, true);
}

修复后完整示例代码

<?php
$url = 'https://the-url.com';
$auth = 'authentication key';
$method ='POST';
$grant = 'grant_type=client_credentials';

$crl = curl_init();
$headr = array();
$headr[] = 'Content-type: application/x-www-form-urlencoded';
$headr[] = 'Authorization: Basic '.$auth;
curl_setopt($crl, CURLOPT_URL,$url);
curl_setopt($crl, CURLOPT_HTTPHEADER,$headr);
curl_setopt($crl, CURLOPT_POST,true);
// 关闭响应头返回
curl_setopt($crl, CURLOPT_HEADER, false);
curl_setopt($crl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($crl, CURLOPT_POSTFIELDS, $grant);

$rest = curl_exec($crl);

if ($rest === false)
{
    print_r('Curl error: ' . curl_error($crl));
}
curl_close($crl);
$data = json_decode($rest, true);
// 输出响应体内容
echo $rest;
?>

内容的提问来源于stack exchange,提问作者displayname

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:45:03