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

为何Rapid API未返回JSON?WebScraping新手开发求助

问题分析与解决

嘿,我一眼就看出问题出在哪啦!你现在输出的不是JSON,是因为你打印的是OkHttp的Response对象本身的字符串描述,而不是API返回的实际响应体内容。response.toString()只会输出请求的元数据(比如协议版本、状态码、请求URL这些),根本没触及到里面的JSON数据。

具体解决步骤

1. 读取响应体的正确姿势

要拿到API返回的JSON,你需要调用response.body().string()方法来读取响应体的字符串内容。不过有两个小细节要注意:

  • response.body().string()只能调用一次,调用后响应体就会被自动关闭
  • 推荐用try-with-resources语法来自动管理Response对象,避免资源泄漏

2. 修改后的完整代码

这里给你调整好的代码,直接替换原来的就能用:

import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class AAA {
    public static void main(String args[]) throws IOException {
        OkHttpClient client = new OkHttpClient();
        
        Request request = new Request.Builder()
            .url("https://api-football-v1.p.rapidapi.com/v2/fixtures/league/1383/last/10?timezone=Europe%252FLondon")
            .get()
            .addHeader("x-rapidapi-host", "api-football-v1.p.rapidapi.com")
            .addHeader("x-rapidapi-key", "myRapidAPIKey")
            .build();

        // 使用try-with-resources自动关闭Response,不用手动处理资源释放
        try (Response response = client.newCall(request).execute()) {
            // 先检查请求是否真的成功(虽然状态码200,但保险起见)
            if (!response.isSuccessful()) {
                throw new IOException("请求失败: " + response);
            }
            // 读取并打印实际的JSON响应内容
            String jsonContent = response.body().string();
            System.out.println(jsonContent);
        }
    }
}

3. 额外注意点

  • 确认你添加的JAR包是完整的:OkHttp依赖OkIO库,所以除了okhttp.jar,还要确保把okio.jar也加入到项目里,不然可能会出现运行时找不到类的错误。
  • 状态码200说明你的API密钥、端点都是有效的,不用怀疑这部分的问题,只是之前没读取到正确的内容而已。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:07:47