返回博客

小红书 API 接入教程(Go):用 net/http 跑通第一个请求

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

这篇教程带你用 Go 接入小红书(RedNote / Xiaohongshu)数据接口。和 PythonNode.js 版一样,你无需自建爬虫——Rnote API 已经把采集基础设施备好,你只用标准库 net/http 发一个 GET 请求即可。

第一步:注册获取 API Key

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

第二步:发起第一个请求

仅用 Go 标准库,无需第三方依赖:

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    endpoint := "https://rnote.dev/api/v2/crawler/search/notes"
    q := url.Values{}
    q.Set("keyword", "美食推荐")
    q.Set("page", "1")

    req, _ := http.NewRequest("GET", endpoint+"?"+q.Encode(), nil)
    req.Header.Set("X-API-Key", "YOUR_API_KEY")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    var data map[string]any
    json.Unmarshal(body, &data)
    fmt.Println(data)
}

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

func call(path string, params url.Values, retries int) ([]byte, error) {
    endpoint := "https://rnote.dev/api/v2/crawler/" + path + "?" + params.Encode()
    var lastErr error
    for i := 0; i < retries; i++ {
        req, _ := http.NewRequest("GET", endpoint, nil)
        req.Header.Set("X-API-Key", "YOUR_API_KEY")
        resp, err := http.DefaultClient.Do(req)
        if err != nil {
            lastErr = err
        } else {
            body, _ := io.ReadAll(resp.Body)
            resp.Body.Close()
            if resp.StatusCode == 200 {
                return body, nil
            }
            lastErr = fmt.Errorf("HTTP %d", resp.StatusCode)
        }
        time.Sleep(time.Duration(1<<i) * time.Second) // 指数退避
    }
    return nil, lastErr
}

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

计费与额度

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

下一步

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