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

OkHttp3通过代理请求无效URL时,始终返回代理服务器的200状态码而非预期状态码问题求助

OkHttp3通过代理请求无效URL时,始终返回代理服务器的200状态码而非预期状态码问题求助

Hey there, sorry to hear this issue has been bugging you for days—let’s try to work through some troubleshooting steps together!

首先排查代理服务器的核心行为

这大概率是代理服务器的配置逻辑导致的:很多网关类代理会自行返回一个「友好的错误提示页面」,而不是透传目标服务器的真实状态码(比如404、504)。此时OkHttp拿到的200状态码,其实是代理服务器返回错误页面的状态码,而非目标服务器的真实响应。

你可以先通过curl命令直接验证这个猜想:

curl -x http://your-proxy-host:proxy-port http://non-existent-target-url.com

如果curl也返回200,且响应内容是代理的错误提示页面,那基本可以确定是代理的问题,需要联系运维调整代理配置,让它透传目标服务器的真实状态码。

检查OkHttp的配置细节

如果代理本身没有问题,那可以排查OkHttp的配置是否有异常:

  • 禁用自动重定向:OkHttp默认会跟随重定向,如果代理把无效URL重定向到自身的错误页,就会导致状态码变为200。试试关闭重定向:
    OkHttpClient client = new OkHttpClient.Builder()
        .followRedirects(false)
        .followSslRedirects(false)
        .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("your-proxy-host", proxy-port)))
        .build();
    
  • 检查响应内容:打印响应的body,确认返回的200内容是不是代理的错误页面:
    Response response = client.newCall(request).execute();
    System.out.println("Status Code: " + response.code());
    System.out.println("Response Body: " + response.body().string());
    
  • 禁用缓存:部分代理可能存在异常缓存行为,试试给请求添加禁用缓存的头:
    Request request = new Request.Builder()
        .url("http://non-existent-target-url.com")
        .header("Cache-Control", "no-cache, no-store, must-revalidate")
        .header("Pragma", "no-cache")
        .build();
    

交叉验证排除OkHttp自身问题

你可以换用其他HTTP客户端(比如Java原生的HttpClient)测试同样的代理+无效URL场景,如果同样返回200,那完全可以排除OkHttp的问题,聚焦到代理服务器的配置调整上。

备注:内容来源于stack exchange,提问作者micky kubo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:49:31