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

PHP无法从指定URL解析XML并提取<raw_text>内容的技术求助

解决从Aviation Weather获取METAR数据的问题

我来帮你排查代码里的问题,然后给出可行的解决方案:

你的代码里存在的几个关键问题:

  • URL参数编码错误:你URL里的&amp;是HTML实体编码,实际在PHP字符串中需要换成普通的&,否则服务器无法正确解析请求参数。
  • 重复XML解析操作:simplexml_load_file($url)已经直接返回了SimpleXMLElement对象,不需要再把它转成字符串然后用simplexml_load_string重复解析,这会导致对象类型错误。
  • 请求被服务器拦截:很多公共API会拒绝没有User-Agent标识的请求,PHP的file_get_contents或simplexml_load_file默认不带User-Agent,这很可能是你拿不到数据的核心原因。

修正后的可行代码:

<?php
// 修正URL,将HTML实体&amp;替换为正常的&
$url = 'https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&hoursBeforeNow=3&mostRecent=true&stationString=KORL';

// 创建请求上下文,添加User-Agent模拟浏览器请求,避免被拦截
$context = stream_context_create([
    'http' => [
        'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    ]
]);

// 加载XML文件,传入上下文信息
$xml = simplexml_load_file($url, 'SimpleXMLElement', LIBXML_NOCDATA, $context);

if ($xml === false) {
    die('无法加载XML数据,请检查请求URL或网络连接');
}

// 按照XML层级正确获取raw_text内容
// XML结构:根节点response -> data -> METAR -> raw_text
$rawText = (string)$xml->data->METAR->raw_text;

echo $rawText;
?>

代码说明:

  1. 修正URL参数:把所有&amp;替换为&,确保服务器能识别每个请求参数。
  2. 添加User-Agent:通过stream_context_create设置请求头,模拟正常浏览器请求,避免被服务器的反爬机制拦截。
  3. 正确遍历XML结构:根据目标XML的层级关系,直接访问raw_text节点并转换为字符串类型。

如果还是无法获取数据,可以先在浏览器里打开修正后的URL,确认是否能正常返回XML内容。如果浏览器可以访问但代码不行,可能需要检查你的服务器是否有对外API访问的网络限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:42:31