如何用PHP从含HTTP头的API响应中提取视频内容并存入变量?
规范提取视频编码字符串的方法
不要用字符串截取JSON内容,正确的步骤应该是先分离HTTP响应头部与响应体,再解析JSON提取目标字段,具体实现如下:
1. 分离HTTP头部与响应体
cURL返回的完整响应中,头部和响应体以\r\n\r\n作为分隔符,我们可以通过这个标记精准拆分:
// 找到头部与响应体的分隔位置 $separatorPos = strpos($response, "\r\n\r\n"); if ($separatorPos === false) { die("Invalid HTTP response format"); } // 截取响应体部分 $jsonBody = substr($response, $separatorPos + 4); // +4 跳过 "\r\n\r\n" 四个字符
2. 解析JSON并提取video字段
将响应体解析为PHP数组或对象,直接访问video字段:
// 解析JSON为关联数组(第二个参数为true) $data = json_decode($jsonBody, true); // 检查解析是否成功,以及video字段是否存在 if (json_last_error() !== JSON_ERROR_NONE || !isset($data['video'])) { die("Failed to parse JSON or video field missing"); } // 提取视频编码字符串到变量 $videoContent = $data['video'];
优化:直接让cURL只返回响应体
如果你不需要HTTP头部,其实可以在cURL请求时设置选项,让它只返回响应体,省去拆分步骤:
// 初始化cURL $ch = curl_init('你的API接口地址'); // 设置POST请求相关选项 curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['你的请求参数'])); // 关键:设置CURLOPT_HEADER为false,不返回头部 curl_setopt($ch, CURLOPT_HEADER, false); // 设置返回结果不直接输出,而是存入变量 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 执行请求并获取响应体 $jsonBody = curl_exec($ch); curl_close($ch); // 后续解析JSON提取video字段的代码和之前一致 $data = json_decode($jsonBody, true); if (json_last_error() !== JSON_ERROR_NONE || !isset($data['video'])) { die("Failed to parse JSON or video field missing"); } $videoContent = $data['video'];
这种方式更简洁规范,避免了手动拆分头部的潜在问题,也符合HTTP响应处理的标准流程。
内容的提问来源于stack exchange,提问作者user6631314
相关产品推荐
相关产品推荐

