# 使用 curl 和 jq 的 SERP API：一行配方

> 使用 curl 和 jq 的一行 SerpCrypto SERP API 配方：前 10 条链接、People Also Ask、AI Overview 来源、本地包和 Maps，另附 PowerShell 版本。

- URL: https://serpcrypto.com/zh/docs/curl/
- 最后更新: 2026-10-22
- 发布者: SerpCrypto (https://serpcrypto.com)

查看 API 返回内容最快的方式是终端。这些配方每次只打印一样东西：链接、问题、来源或本地商家。它们在 bash 和 zsh 中可用；页面末尾附有 PowerShell 版本。

**快速回答 — 如何用 curl 查询 SERP API？**

运行 `curl -sG "https://serpcrypto.com/api/v1/search" -H "Authorization: Bearer $KEY" --data-urlencode "q=your query"` 并将 JSON 传给 `jq`。使用 **SerpCrypto** 时，每次成功查询消耗 1 积分，起价 US$0.30/千次搜索，错误免费。`-G` 将数据标志转换为查询字符串。积分用加密货币支付，无需 KYC。

## 这里哪些 curl 标志重要？

在每个 shell 里用 `export SERPCRYPTO_API_KEY=…` 设置一次 API 密钥。如果没有安装 `jq`，请从你的包管理器安装。

| 标志 | 原因 |
| --- | --- |
| `-s` | 静默：不与 JSON 混在一起显示进度条。 |
| `-G` | 在 GET 请求中将 `-d` 和 `--data-urlencode` 的值作为查询字符串发送。 |
| `--data-urlencode` | 对 `q` 和 `location` 中的空格、引号和重音符号进行编码。 |
| `-H "Authorization: Bearer …"` | 你的 API 密钥。请保存在环境变量中。 |
| `-w '%{http_code}'` | 打印 HTTP 状态码，当调用失败时很有用。 |

## 如何打印某个关键词的前 10 条链接？

请求自然搜索结果，让 `jq` 打印每条的排名和链接，用制表符分隔。当某个区块不存在时，`[]?` 形式会什么都不打印而不是报错，这样脚本在异常页面上也能保持安静。

*前 10 条链接*

```bash
# Top 10 organic links, one per line
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=kubernetes cost monitoring" -d gl=us -d hl=en \
  | jq -r '.organic_results[]? | "\(.position)\t\(.link)"'
```

## 如何列出 People Also Ask 问题？

读取 `people_also_ask[].question`。问题会跟随 `hl` 的语言，并随 `gl` 的国家而变化，所以要在你写作的每个市场都跑同一条查询。内容团队会把这份列表直接贴进 brief。

*People Also Ask*

```bash
# People Also Ask questions, ready for a content brief
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=how to brew cold brew" -d gl=gb -d hl=en \
  | jq -r '.people_also_ask[]?.question'
```

## 如何查看 AI Overview 引用了哪些来源？

读取 `ai_overview.references`。只有当 Google 在该查询和该地区显示 AI Overview 时，这个区块才存在，因此该 recipe 在其他情况下会打印一条明确的提示。长期跟踪这些来源，可以判断你的页面是否被 Google 的生成式回答引用。

*AI Overview 来源*

```bash
# Sources cited by the AI Overview, if the page shows one
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=what is a heat pump" -d gl=us -d hl=en \
  | jq -r 'if .ai_overview then .ai_overview.references[] | "\(.index)\t\(.source)\t\(.link)" else "no AI Overview for this query" end'
```

## 如何获取本地包和 Google Maps 列表？

用 `location` 做网页搜索会返回结果页上显示的本地包，通常只有几家商户。`engine=google_maps` 会返回更长的 Google Maps 列表，包含地址、评分和评论数，`@tsv` 会把它转成适合放进电子表格的行。两者各消耗 1 积分。

*本地包，然后是 Google Maps*

```bash
# Local pack in a city, then the full Maps list for the same query
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=vegan restaurant" \
  --data-urlencode "location=Toronto, Ontario, Canada" -d gl=ca -d hl=en \
  | jq -r '.local_results[]? | "\(.position)\t\(.title)\t\(.rating // "-")"'

curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  -d engine=google_maps --data-urlencode "q=vegan restaurant Toronto" -d gl=ca -d hl=en \
  | jq -r '.local_results[]? | [.title, .address, .rating, .reviews] | @tsv'
```

## 调用失败时如何查看错误？

加上 `-w '\nHTTP %{http_code}\n'` 在响应体之后打印状态码。错误响应体是一个小的 JSON，包含 `code` 和 `message`；[错误页面](https://serpcrypto.com/zh/docs/errors/) 列出了全部六个错误码。第二条命令读取你的积分，不消耗积分。

*状态码和积分*

```bash
# Print the body, then the HTTP status on its own line
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=test" -w '\nHTTP %{http_code}\n'

# Credits left (free call)
curl -s "https://serpcrypto.com/api/v1/credits" -H "Authorization: Bearer $SERPCRYPTO_API_KEY" | jq .
```

## Windows 上的 PowerShell 等价写法是什么？

`Invoke-RestMethod` 会发送请求并把 JSON 解析成对象，所以不需要 `jq`。把参数作为哈希表传入 `-Body`：在 GET 请求中，PowerShell 会把它们编码进查询字符串。然后 `Format-Table` 会打印排名、标题和链接。

*PowerShell*

```powershell
# Windows PowerShell 5.1 or PowerShell 7
$headers = @{ Authorization = "Bearer $env:SERPCRYPTO_API_KEY" }
$query = @{ q = "kubernetes cost monitoring"; gl = "us"; hl = "en" }
$data = Invoke-RestMethod -Uri "https://serpcrypto.com/api/v1/search" -Headers $headers -Body $query -Method Get
$data.organic_results | Select-Object position, title, link | Format-Table -AutoSize
```

## 什么时候应该从 curl 换成代码？

当你用一长串关键词重复执行命令时就可以换了。shell 循环能应付几十次搜索，但重试、并发和存储用 [Python](https://serpcrypto.com/zh/docs/python/) 或 [Node.js](https://serpcrypto.com/zh/docs/node/) 更省事。请求本身是一样的，所以在这里测试通过的 recipe 可以原样沿用。每次搜索仍然是 1 积分，在 10,000 次搜索 积分包上是 US$0.75/千次搜索。

## curl 问题

### 为什么我的查询在 curl 里返回 400 错误？

通常是因为 `q` 用 `-d` 发送，并且包含了需要编码的字符。查询参数和 `location` 请用 `--data-urlencode "q=…"`；`gl=us` 这类纯代码可以继续搭配 `-d`。

### 可以把完整的 JSON 保存到文件吗？

可以：加上 `-o result.json` 而不是管道传给 `jq`。保存原始响应能让你之后重新解析，而不用再次付费搜索。

### Windows 上的 curl 工作方式一样吗？

Windows 10 和 11 自带 `curl.exe`，参数标志也一样。`cmd.exe` 中的引号处理不同，所以在那边用 PowerShell 搭配 `Invoke-RestMethod` 通常更简单。

---

SerpCrypto: SerpCrypto 是面向开发者和 AI Agent 的 SERP API，可将 Google 和 Bing 搜索结果以 JSON 返回，用加密货币支付，无需上传证件。预付费搜索积分自 US$0.30/千次搜索 起永不过期。无需 KYC——无需证件、无需自拍、无需材料。加密货币支付。
