Kotlin中Unirest请求API返回200,HttpClient/OkHttp却返回403?
问题分析与解决方案
最可能的原因:缺失符合要求的User-Agent请求头
Unirest会自动添加默认的User-Agent头(例如Unirest/1.4.9这类格式),而Java HttpClient、OkHttp、Retrofit默认不会携带这类符合多数API预期的User-Agent值。很多API服务器会通过校验User-Agent来拦截非标准客户端请求,从而返回403状态码。
解决方案:手动添加User-Agent头
在HttpClient请求中补充User-Agent头,模拟Unirest的默认值或API允许的格式即可:
val client = HttpClient.newBuilder().build(); val request = HttpRequest.newBuilder() .uri(URI.create(url)) .GET() .header(headerKey, headerValue) .header("User-Agent", "Unirest/1.4.9") // 直接复用Unirest的默认值,或替换为API允许的其他标识 .build() val response = client.send(request, HttpResponse.BodyHandlers.ofString()); println(response.statusCode())
其他排查方向
- 核对请求头格式:确认
Bearer与token之间有且仅有一个空格(虽然Unirest请求正常说明此概率较低,但可快速验证)。 - 对比完整请求头:用抓包工具(如Charles、Wireshark)捕获Unirest发送的所有请求头,将这些头完整复制到HttpClient请求中,排查是否有其他Unirest自动添加的必要头信息。
- 检查环境差异:确认不同客户端是否在同一网络环境下运行,排除服务器端IP限制导致的403。
内容的提问来源于stack exchange,提问作者Tobias
相关产品推荐
相关产品推荐

