Android Studio调用API报404 Not Found,纯Java环境可正常运行
导致Android环境下API请求返回404的可能原因及解决方向
1. setDoOutput(true) 干扰GET请求逻辑
标准Java环境中,HttpURLConnection 设置setDoOutput(true)后,GET请求可能被隐式兼容,但Android的实现逻辑会让这个设置改变请求的处理方式,导致服务器无法正确识别请求路径,返回404。
你的请求是GET方法,完全不需要开启setDoOutput(true),直接移除这行代码重试。
2. Authorization头格式不符合服务器要求
你用了Bearer email:wachtwoord的格式,这不符合标准Bearer Token规范(标准格式为Bearer <token字符串>)。如果是基础认证,正确格式应该是Basic <Base64编码的email:wachtwoord>。
普通Java环境中服务器可能做了兼容处理,但Android环境下的请求可能因为头格式错误,被服务器路由到不存在的路径。建议核对服务器的认证文档,修正头格式。
3. 网络环境/域名解析差异
- 模拟器默认代理可能和本地Java环境不同,导致请求被转发到错误地址,可关闭模拟器代理或改用真机测试。
- Android设备的DNS缓存可能和本地不一致,解析到错误的服务器IP,导致请求的资源不存在。
4. 冗余请求头引发服务器路由异常
GET请求不需要请求体,你设置的Content-Type: application/json和Content-Length: 0属于冗余头,可能干扰服务器的接口匹配逻辑,返回404。建议移除这两行代码:
http.setRequestProperty("Content-Type", "application/json"); http.setRequestProperty("Content-Length", "0");
调试技巧
在Android中打印完整请求信息,和标准Java环境对比,快速定位差异:
// 打印请求URL System.out.println("Request URL: " + url.toString()); // 打印所有请求头 Map<String, List<String>> headers = http.getRequestProperties(); for (Map.Entry<String, List<String>> entry : headers.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue().get(0)); }
内容的提问来源于stack exchange,提问作者Michielo
相关产品推荐
相关产品推荐

