You need to enable JavaScript to run this app. Android使用url.openConnection().getInputStream()访问PHP页面报404咨询
优惠活动
大模型
产品
解决方案
定价
更多

Android使用url.openConnection().getInputStream()访问PHP页面报404咨询

问题核心原因

你遇到的404和URL是不是PHP后缀完全无关,是目标服务端的请求拦截策略导致的:

  • 你现在用的url.openConnection()是Java原生的网络连接方法,默认会在请求头里附带User-Agent: Java/[你的JDK版本号]的客户端标识
  • 美国国家气象局的alerts.weather.gov服务,会直接拦截携带这类Java原生标识的请求,返回404状态码拒绝响应
  • 你在浏览器中能正常访问这个地址,是因为浏览器会自动携带标准的浏览器User-Agent标识,不会触发拦截规则
  • 之前测试可用的fin24 RSS源没有配置这类客户端拦截规则,所以默认的Java连接可以正常获取内容,不存在“非PHP页面就不会报错”的通用规律
具体修复方案

修改现有getInputStream()方法,在建立网络连接时手动设置符合要求的请求头,不要使用默认连接配置。上述方法不需要引入任何第三方网络库,仅需要在代码顶部额外导入java.net.HttpURLConnection即可,完全兼容你现有的解析逻辑:

public InputStream getInputStream(URL url) {
    try {
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        // 设置常见的浏览器User-Agent,绕过服务端的非标准客户端拦截
        connection.setRequestProperty(
            "User-Agent",
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
        );
        connection.connect();
        // 校验响应状态码,避免错误情况下读取到404页面的无效流
        if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
            return null;
        }
        return connection.getInputStream();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}
后续注意事项
  • 不要将User-Agent设为空值,多数公共服务端会直接拒绝空UA的请求
  • 完成上述修改后,不需要调整现有XML解析逻辑,即可正常获取目标地址返回的标准CAP格式XML内容
  • 后续如果遇到其他RSS源返回403/404类的拦截错误,优先排查默认请求头的User-Agent配置,这类拦截绝大多数都是基于客户端标识判断的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 06:06:03