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
相关产品推荐
相关产品推荐

