COMEX 美黄金 GC 是全球贵金属定价核心标的,内外盘价差套利系统、大宗商品投研后台、自动化风控程序都需要定时同步完整盘口数据。很多 Java 开发人员直接写单次请求代码,未封装通用工具,每次新增监控逻辑都要重复编写请求头、异常捕获、响应处理代码,开发冗余度极高。 本文基于项目通用 OkHttp 网络组件,完整封装可复用黄金行情请求工具类,包含统一压缩请求头、响应状态校验、异常捕获、原始 JSON 返回全流程,适配 SpringBoot 定时任务、本地控制台量化程序,附带完整接口请求地址、标准返回 JSON 结构、期货特有涨跌停、成交量字段业务解读,以及定时任务集成落地方案。
一、HTTP 行情接口基础配置
- 实时行情统一请求地址:http://39.107.99.235:1008/getQuote.php
- 当前目标品种请求参数 code 固定值:GC
- 完整拼接请求 URL:
http://39.107.99.235:1008/getQuote.php?code=GC - 强制统一请求 Header:Accept-Encoding: gzip,开启 gzip 压缩大幅减少网络传输体积,缩短接口响应耗时;
- 请求方式:标准 GET 同步请求,适合定时轮询类业务场景。
二、完整可复用 Java 工具类代码
java
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.util.concurrent.TimeUnit;
/**
* COMEX美黄金 hf_GC 行情请求通用工具类
* 支持全局复用OkHttpClient,内置超时、压缩请求头、异常捕获逻辑
*/
public class GoldQuoteUtil {
// 全局单例http客户端,避免频繁创建连接池
private static final OkHttpClient HTTP_CLIENT;
static {
HTTP_CLIENT = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
}
/**
* 获取COMEX美黄金完整盘口原始JSON字符串
* @return 正常返回行情JSON,网络/接口异常返回null
*/
public static String getComexGoldQuote() {
String targetUrl = "http://39.107.99.235:1008/getQuote.php?code=GC";
// 构建请求对象,携带压缩请求头
Request request = new Request.Builder()
.url(targetUrl)
.header("Accept-Encoding", "gzip")
.get()
.build();
try (Response response = HTTP_CLIENT.newCall(request).execute()) {
// 校验接口响应状态码
if (!response.isSuccessful()) {
System.out.println("美黄金行情接口请求失败,响应码:" + response.code());
return null;
}
// 读取响应正文并返回
return response.body().string();
} catch (Exception e) {
// 捕获网络超时、连接失败全量异常并打印日志
System.err.println("请求COMEX黄金行情出现通信异常:");
e.printStackTrace();
return null;
}
}
// 程序测试入口
public static void main(String[] args) {
String quoteJson = GoldQuoteUtil.getComexGoldQuote();
if (quoteJson != null) {
System.out.println("===== COMEX美黄金hf_GC完整盘口数据 =====");
System.out.println(quoteJson);
} else {
System.out.println("行情数据获取失败,请检查网络环境");
}
}
}
三、接口完整返回 JSON 结构样例
bash
{
"code": 200,
"msg": "success",
"data": {
"body": [
{
"StockCode": "GC",
"Price": 2338.65,
"Open": 2332.10,
"LastClose": 2330.42,
"High": 2342.71,
"Low": 2328.05,
"Time": "2026-07-10 10:12:43",
"LastTime": 1783740763,
"BP1": 2338.20,
"BV1": 215,
"SP1": 2338.65,
"SV1": 168,
"TotalVol": 215690,
"Diff": 8.23,
"DiffRate": 0.35,
"LimitUp": 2445.30,
"LimitDown": 2215.60
}
]
}
}
四、分层字段完整解读
1、外层通用状态字段
- code=200:接口请求成功标识,非 200 代表访问异常;
- msg:状态描述文本;
- data.body:行情数据数组,单品种仅包含一条对象。
2、贵金属期货专属业务字段
- StockCode:COMEX 黄金品种编码 GC;
- Price/Open/LastClose:实时金价、当日开盘、前一日收盘;
- High/Low:日内价格波动区间上下限;
- BP1/BV1、SP1/SV1:买卖一档价格与挂单量,可用于盘口强弱判断;
- TotalVol:当日累计成交总手数,适合量价趋势分析;
- Diff/DiffRate:当日涨跌额、涨跌幅;
- LimitUp/LimitDown:当日涨跌停参考价格,外盘贵金属合约自带风控基准价格。
五、SpringBoot 定时任务集成落地方案
1、项目引入 OkHttp Maven 依赖
XML
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
2、新建定时任务类,每 30 秒拉取一次美黄金行情
java
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class GoldMonitorTask {
@Scheduled(fixedRate = 30000)
public void monitorGoldPrice() {
String jsonStr = GoldQuoteUtil.getComexGoldQuote();
if(jsonStr == null) return;
// 此处可引入FastJSON/Gson解析json,判断价格阈值实现预警逻辑
}
}
3、启动类添加 @EnableScheduling 注解开启定时功能,服务启动后自动循环拉取美黄金盘口数据。
六、工程开发优势说明
- 单例 HTTP 连接池:全局复用 OkHttpClient,避免频繁创建销毁连接造成性能损耗;
- 统一超时管控:连接、读写超时全部固定 10 秒,防止接口阻塞线程;
- 全量异常捕获:网络中断、接口报错均打印日志,线上便于问题排查;
- 高度复用:后续新增白银、原油等外盘品种,仅复制工具类修改 URL 内 code 参数即可,请求逻辑无需重写;
- 适配业务:可用于内外金银价差监控、大宗商品数据后台、贵金属风控预警系统。