五种语言,同一个接口:Java / Go / Node.js / C# / PHP 调用对照
行情接口是纯 HTTP GET、返回 JSON,不依赖任何 SDK、不绑定任何语言。本文用同一个资源 /hs/list/all,分别用 Java、Go、Node.js、C#、PHP 五种后端语言的标准库各写一份调用,证明「会发 GET 请求,就能取 A 股数据」。主机地址只在各段代码的 BASE 常量里出现,全程不引入任何第三方 SDK。
1. 问题场景
前面覆盖了浏览器、Python、Excel、Power BI。但你的主力后端可能是 Java 微服务、Go 网关、C# 桌面、PHP 站点——难道为了取行情还得在栈里塞一套 Python?
不需要。行情接口是「一个 URL 返回 JSON」,而任何现代语言的标准库都能发 HTTP GET。本文把同一份数据用 5 种语言各写一遍,你会看到它们高度同构:拼 URL → GET → 读 body → 解析 JSON。
2. 数据契约
| 接口 | GET /hs/list/all |
| 返回 | JSON 数组,每条 {dm, mc, jys} |
| 字段 | dm=代码,mc=名称,jys=交易所(SH/SZ) |
| 错误码 | 104=缺 token(HTTP 400);102=证书不存在(HTTP 403) |
| 频率 | 免费档约 200 次/日、300 次/分 |
3. 五种语言对照
下面五段功能完全一致:请求 /hs/list/all,打印 HTTP 状态码 + 返回前 60 字符。把 你的token 换成真实凭证即得数据。主机地址统一放在 BASE 常量。
3.1 Python(requests)
import requests
BASE = "https://api.zhituapi.com"
url = f"{BASE}/hs/list/all?token=你的token"
r = requests.get(url, timeout=10)
print(r.status_code, r.text[:60])
3.2 Node.js(fetch,Node 18+ 内置)
const BASE = "https://api.zhituapi.com";
const token = "你的token";
const url = `${BASE}/hs/list/all?token=${token}`;
fetch(url)
.then(r => r.text().then(t => console.log(r.status, t.slice(0, 60))))
.catch(e => console.log("ERR", e.message));
3.3 Java(HttpURLConnection,JDK 标准库)
import java.net.*;
import java.io.*;
public class Demo {
public static void main(String[] a) throws Exception {
String BASE = "https://api.zhituapi.com";
String url = BASE + "/hs/list/all?token=你的token";
HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection();
c.setRequestMethod("GET");
int code = c.getResponseCode();
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
StringBuilder sb = new StringBuilder(); String line;
while ((line = br.readLine()) != null) sb.append(line);
int n = Math.min(60, sb.length());
System.out.println(code + " " + sb.substring(0, n));
}
}
3.4 Go(net/http)
package main
import ("fmt"; "io"; "net/http"; "os")
func main() {
BASE := "https://api.zhituapi.com"
url := BASE + "/hs/list/all?token=你的token"
r, err := http.Get(url)
if err != nil { fmt.Println("ERR", err); os.Exit(1) }
defer r.Body.Close()
b, _ := io.ReadAll(r.Body)
n := 60; if len(b) < n { n = len(b) }
fmt.Println(r.StatusCode, string(b[:n]))
}
3.5 C#(HttpClient)
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Demo {
static async Task Main() {
var BASE = "https://api.zhituapi.com";
var url = BASE + "/hs/list/all?token=你的token";
using var c = new HttpClient();
var r = await c.GetAsync(url);
var t = await r.Content.ReadAsStringAsync();
int n = Math.Min(60, t.Length);
Console.WriteLine($"{(int)r.StatusCode} {t.Substring(0, n)}");
}
}
3.6 PHP(cURL)
<?php
$BASE = "https://api.zhituapi.com";
$url = $BASE . "/hs/list/all?token=你的token";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$body = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $code . " " . mb_substr($body, 0, 60) . PHP_EOL;
4. 统一错误处理(跨语言)
五种语言都要处理同一件事:
一个跨语言通用的重试骨架(伪代码):
for attempt in 1..N:
try:
resp = GET(url)
if resp starts with '{': return parse_json(resp)
if resp starts with '104' or '102': raise AuthError(resp)
if status == 401: sleep(2^attempt); continue # 限频退避
except NetworkError:
sleep(2^attempt); continue
raise MaxRetriesExceeded
5. 接口层验证
五种语言代码逻辑等价(同一 GET),填入真实 token 后行为一致。无 token / 假 token 行为:
无 token : HTTP 400 -> 104:缺少token参数
假 token : HTTP 403 -> 102:Licence证书(FAKE_TOKEN_000)不存在
带 token 的完整数据需填入真实凭证后运行即得。
6. 坑与注意事项
7. 小结
浏览器、Python、Excel、Power BI、Java/Go/Node/C#/PHP——同一套 GET 接口,覆盖了多少种消费端。这正是「一个 URL 就是一个数据源」:它不挑语言、不挑工具。
下一篇《聚宽/米筐 notebook 里补外部数据:平台没有的,用 HTTP 拿》,聊聊当你已经在某个量化平台里,怎么用平台内置的 Python notebook 发一个 HTTP 请求,把外部数据并进来。
本文所有数据来自公开行情接口的真实返回,仅用于技术演示。A 股涨红跌绿,本文不构成任何投资建议,据此操作风险自负。
网硕互联帮助中心





评论前必须登录!
注册