PHP cURL请求API返回空白 页面源码可见XML响应问题排查
PHP cURL请求内网HTTPS API后浏览器无输出问题定位
直接原因
- 你的PHP脚本未设置面向浏览器的响应头,PHP默认输出
Content-Type: text/html - 浏览器收到
text/html类型的XML返回内容时,会将内容开头的XML声明(<?xml ...?>)判定为非法HTML处理指令,触发渲染逻辑隐藏所有内容,仅在页面源码中保留原始返回值 - 你在cURL配置中添加的
Content-Type: application/xml是发送给远端API的请求头,仅用于告知API本次请求的内容格式,和当前脚本向浏览器返回的响应头完全无关 - Postman会自动识别返回内容的格式并提供预览,不受响应头类型限制,因此表现和浏览器存在差异
修复方案
根据你需要的展示效果,在echo $result;语句前添加对应响应头即可:
- 如需直接展示XML原始纯文本(和页面源码看到的内容完全一致):
header('Content-Type: text/plain; charset=utf-8'); - 如需让浏览器将返回内容识别为XML,自动渲染为结构化XML树(和Postman的XML预览效果一致):
header('Content-Type: application/xml; charset=utf-8');
另外可移除cURL请求头中冗余的Content-Type: application/xml:GET请求无请求体,该头对API无实际作用。
修正后完整代码
<?php $username = 'XXXX'; $password = 'XXXX'; $url = 'https://10.5.6.1/getperformance'; $credentials = base64_encode("$username:$password"); $headers = []; $headers[] = "Authorization: Basic {$credentials}"; $headers[] = 'Accept: */*'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0'); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = curl_exec($ch); if (curl_errno($ch)) { echo 'Error:' . curl_error($ch); } curl_close($ch); // 按需选择对应响应头 header('Content-Type: application/xml; charset=utf-8'); echo $result;
内容的提问来源于stack exchange,提问作者axlprogrammer
相关产品推荐
相关产品推荐

