返回博客

小红书 API 接入教程(Java):用 HttpClient 跑通第一个请求

Rnote API 团队 · · 31 次阅读 · English
小红书数据 API教程 Java

这篇教程带你用 Java 接入小红书(RedNote / Xiaohongshu)数据接口。无需自建爬虫——Rnote API 已经把采集基础设施备好,你用 Java 11+ 内置的 HttpClient 发一个带 X-API-Key 头的 GET 请求即可。也可参考 PythonNode.jsGoPHP 版本。

第一步:注册获取 API Key

前往注册页创建账户并验证邮箱,获取免费额度与 API Key。

第二步:发起第一个请求

Java 11+ 标准库 java.net.http.HttpClient,无需任何第三方依赖:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class Quickstart {
    public static void main(String[] args) throws Exception {
        String keyword = URLEncoder.encode("美食推荐", StandardCharsets.UTF_8);
        String url = "https://rnote.dev/api/v2/crawler/search/notes"
                   + "?keyword=" + keyword + "&page=1";

        HttpRequest req = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("X-API-Key", "YOUR_API_KEY")
                .GET()
                .build();

        HttpResponse<String> resp = HttpClient.newHttpClient()
                .send(req, HttpResponse.BodyHandlers.ofString());

        System.out.println(resp.statusCode());
        System.out.println(resp.body());
    }
}

跑通后,把端点换成 note/image(图文详情)、user/info(博主信息)等即可,参数说明见接口文档

第三步:封装一个带重试的调用

import java.net.URI;
import java.net.http.*;
import java.util.Map;
import java.util.StringJoiner;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

static String call(String path, Map<String, String> params, int retries) throws Exception {
    StringJoiner q = new StringJoiner("&");
    for (var e : params.entrySet()) {
        q.add(e.getKey() + "=" + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8));
    }
    String url = "https://rnote.dev/api/v2/crawler/" + path + "?" + q;
    HttpClient client = HttpClient.newHttpClient();

    for (int i = 0; i < retries; i++) {
        HttpRequest req = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("X-API-Key", "YOUR_API_KEY")
                .GET().build();
        HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandlers.ofString());
        if (resp.statusCode() == 200) return resp.body();
        Thread.sleep((long) Math.pow(2, i) * 1000); // 指数退避
    }
    throw new RuntimeException("请求多次失败");
}

仅成功请求(HTTP 2xx)扣费,失败重试不额外计费,所以可以放心加重试逻辑。

计费与额度

按请求计费、无月费、无最低消费;注册即送免费额度。充值方式与当前优惠见定价页

下一步

免费注册,现在就用 Java 发出你的第一个请求。