免费名言警句:多语言调用示例(Python / Java / Go / Node.js)
# 免费名言警句:多语言调用示例(Python / Java / Go / Node.js)
> 接口 1839-1 · 免费 · 请求方式 POST/GET · 返回 JSON · 适用人群:多语言技术栈团队 · 阅读时间:约 5 分钟
## 核心要点
- 接口是标准 HTTP + `application/x-www-form-urlencoded`,任何能发 HTTP 的语言都能调。
- 四个示例统一:超时 15 秒、判断 `ret_code != "0"` 视为失败、密钥用 `YOUR_APPKEY` 占位。
- 解析路径一致:取 `showapi_res_body.contentlist`,遍历 `content`。
## Why
你的后端可能是 Java、Go,前端脚本用 Node.js,数据分析用 Python。无论哪种栈,调用方式都只是"拼 URL + 发表单"。本文给出四种语言的完整可运行片段,复制替换 AppKey 即可用,避免你再为不同语言重复踩坑。
## What
**接口速览**
| 项 | 值 |
|----|----|
| 请求地址 | `https://route.showapi.com/1839-1` |
| 方式 | GET(参数放 query)或 POST(表单)均可 |
| 参数 | `appKey`(query)、`num`(表单/query,最多 10) |
| 超时建议 | 15 秒(对齐官方 read/connect timeout) |
## How
### Python(requests)
```python
import requests
r = requests.get(
"https://route.showapi.com/1839-1",
params={"appKey": "YOUR_APPKEY", "num": "3"},
timeout=15,
)
body = r.json()["showapi_res_body"]
if body.get("ret_code") != "0":
raise RuntimeError(body.get("remark"))
for it in body["contentlist"]:
print(it["content"])
```
### Java(java.net.http,JDK 11+)
```java
import java.net.http.*;
import java.net.URI;
import java.time.Duration;
public class Quotes {
public static void main(String[] args) throws Exception {
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://route.showapi.com/1839-1?appKey=YOUR_APPKEY&num=3"))
.timeout(Duration.ofSeconds(15))
.GET().build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body()); // 自行用 JSON 库解析 showapi_res_body.contentlist
}
}
```
### Go
```go
package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
client := &http.Client{Timeout: 15 * time.Second}
url := "https://route.showapi.com/1839-1?appKey=YOUR_APPKEY&num=3"
resp, err := client.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body)) // 自行用 encoding/json 解析 showapi_res_body.contentlist
}
```
### Node.js(fetch)
```javascript
const url = "https://route.showapi.com/1839-1?appKey=YOUR_APPKEY&num=3";
fetch(url, { signal: AbortSignal.timeout(15000) })
.then((r) => r.json())
.then((data) => {
const body = data.showapi_res_body;
if (body.ret_code !== "0") {
console.error("接口错误:", body.remark);
return;
}
body.contentlist.forEach((it) => console.log(it.content));
})
.catch((e) => console.error("请求失败:", e));
```
## 返回示例与解析
```json
{
"showapi_res_body": {
"ret_code": "0",
"remark": "查询成功!",
"contentlist": [
{ "content": "德盛者威广,力盛者骄众。齐桓公尚德以霸,秦二世尚刑而亡。——陆贾" }
]
}
}
```
各语言取到 JSON 后,统一取 `showapi_res_body` → 判断 `ret_code == "0"` → 遍历 `contentlist[].content`。
## 进阶 / 边界
- `ret_code` 是字符串 `"0"`,JSON 解析后比较请用字符串而非整数。
- 生产环境建议加**指数退避重试**(仅对网络错误,不对业务错误码重试)。
- 免费档位有限,多语言服务共享同一 AppKey 的额度,注意统一缓存(见缓存策略篇)。
## FAQ
**Q1:GET 和 POST 有区别吗?**
A:接口两者都支持,业务结果一致;参数在 GET 放 query、POST 放表单均可。
**Q2:超时设多少合适?**
A:官方连接/读取超时均为 15 秒,客户端建议对齐设 15 秒,避免长阻塞。
**Q3:返回中文乱码怎么办?**
A:响应为 UTF-8 JSON,确保解析库以 UTF-8 读取;Node/Java/Go 默认 UTF-8,Python `r.json()` 自动处理。
**Q4:能并发调用吗?**
A:可以,但免费档位有限,高并发请配合缓存与限流(见缓存策略篇)。
## 相关能力 / 下一步阅读
- [免费名言警句:5 分钟接入,从注册到第一条名言](https://www.showapi.com/guides/famous-quotes-quickstart-1839)
- [免费名言警句:如何设计缓存策略,避免重复调用浪费免费档位](https://www.showapi.com/guides/famous-quotes-cache-1839)
- [免费名言警句:返回字段全解(contentlist / ret_code / allNum)](https://www.showapi.com/guides/famous-quotes-response-fields-1839)
- **本系列共 10 篇**:查看[免费名言警句指南总目录](https://www.showapi.com/guides/famous-quotes-guides-1839)