今日油价 prov 参数怎么传?查询油价与查询行情的必填差异
约 12 分钟 入门今日油价prov参数必填参数接入点对比
# 今日油价 prov 参数怎么传?查询油价与查询行情的必填差异
接口/接入点:今日油价(apiCode=138)· 查询油价(138-46)/ 查询行情(138-49) · 免费 · 适用人群:已接入或准备接入的开发者 · 阅读时间:约 4 分钟 · 最后实测核对:2026-09-18
同一个接口下的两个接入点,`prov` 一个选填一个必填。照着其中一个的写法去调另一个,请求会直接失败。下面把差异、省名写法、缺失时的返回逐条列清。
## 核心要点
- 查询油价(138-46)的 `prov` 是选填,不传时返回全国 31 个省份,计费次数为 1。
- 查询行情(138-49)的 `prov` 是必填,不传时平台层直接返回 `showapi_res_code=-1` 与 `showapi_res_error="must input prov field"`。
- 省名按精确匹配处理:`北京` 能查到,`北京市` 和 `广` 都会返回 `ret_code=-1`(2026-09-18 实测)。
## 两个接入点的必填规则
| 接入点 | 请求地址 | `prov` | 用途 |
|---|---|---|---|
| 查询油价(138-46) | `https://route.showapi.com/138-46` | 选填 | 查各标号具体价格 |
| 查询行情(138-49) | `https://route.showapi.com/138-49` | 必填 | 查涨跌幅与调价日 |
必填规则的出处是官方 OpenAPI 文档:`138-46` 的请求体 schema 里 `prov` 只声明了类型没有 `required`,`138-49` 的 schema 里 `required` 列表包含 `prov`。
## 不传 prov 时分别会怎样
这是两个接入点行为差别最大的地方,2026-09-18 各调一次的结果如下。
查询油价(138-46)不传 `prov`:
```json
{
"showapi_res_code": 0,
"showapi_fee_num": 1,
"showapi_res_body": { "ret_code": 0, "list": [ /* 31 个省份,共 31 条 */ ] }
}
```
返回成功,`list` 长度 31,覆盖全部 31 个省级行政区,计费次数为 1。
查询行情(138-49)不传 `prov`:
```json
{
"showapi_res_error": "must input prov field",
"showapi_res_code": -1,
"showapi_fee_num": 0,
"showapi_res_body": {}
}
```
平台层直接失败,`showapi_res_body` 是空对象,计费次数为 0。注意这里的失败层级与省名写错不同:缺必填参数在 `showapi_res_code` 就失败了,省名写错则是外层成功、内层 `ret_code=-1`。
## 省名怎么填
用产品文档示例里的标准省名:北京、天津、河北、山西、内蒙古、辽宁、吉林、黑龙江、上海、江苏、浙江、安徽、福建、江西、山东、河南、湖北、湖南、广东、广西、海南、重庆、四川、贵州、云南、西藏、陕西、甘肃、青海、宁夏、新疆。
2026-09-18 用查询油价(138-46)做的对照实测:
| 传入值 | 结果 |
|---|---|
| `prov=北京` | 成功,返回北京 1 条 |
| `prov=北京市` | `ret_code=-1`,`remark="参数错误,请输入所在省或直辖市的名称"`,不计费 |
| `prov=广` | 同上,返回参数错误 |
| `prov=广西` | 成功,返回广西 1 条 |
| `prov=广东` | 成功,返回广东 1 条 |
| `prov=" 北京 "` | 成功,省名前后空格被容错处理 |
不按前缀匹配这一点值得记住:想用模糊输入省时,接口不会帮你猜。
## 调用代码
两个接入点的调用方式完全一致,只换路径。
Python(requests):
```python
import requests
def fetch(path, prov=None):
params = {"appKey": "YOUR_APPKEY"}
if prov:
params["prov"] = prov
resp = requests.post(f"https://route.showapi.com/{path}", data=params, timeout=5)
data = resp.json()
if data.get("showapi_res_code") != 0:
# 缺必填参数、AppKey 错误等平台层问题在这里暴露
raise RuntimeError(f"平台层失败: {data.get('showapi_res_error')}")
body = data["showapi_res_body"]
if body.get("ret_code") != 0:
# 省名写法不对等业务层问题在这里暴露
raise RuntimeError(f"业务层失败: {body.get('remark')}")
return body
print(fetch("138-46", "北京")["list"][0]["p92"])
print(fetch("138-49", "北京")["p0"]["change_percent"])
```
cURL:
```bash
# 查询油价(prov 选填)
curl -X POST "https://route.showapi.com/138-46?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" -d "prov=%E5%8C%97%E4%BA%AC"
# 查询行情(prov 必填)
curl -X POST "https://route.showapi.com/138-49?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" -d "prov=%E5%8C%97%E4%BA%AC"
```
Node.js(fetch):
```javascript
async function fetchOil(path, prov) {
const body = new URLSearchParams({ appKey: "YOUR_APPKEY" });
if (prov) body.set("prov", prov);
const resp = await fetch(`https://route.showapi.com/${path}`, {
method: "POST",
headers: { "content-type": "application/x-www-form-urlencoded" },
body,
signal: AbortSignal.timeout(5000),
});
const data = await resp.json();
if (data.showapi_res_code !== 0) throw new Error(data.showapi_res_error);
if (data.showapi_res_body.ret_code !== 0) throw new Error(data.showapi_res_body.remark);
return data.showapi_res_body;
}
console.log(await fetchOil("138-46", "北京"));
console.log(await fetchOil("138-49", "北京"));
```
## 适用条件与注意事项
- 查询油价(138-46)不传 `prov` 会一次返回 31 个省份,对做全国比价这类需求更省调用次数,用法见《今日油价:一次调用取回全国 31 省油价的做法》。
- 两个接入点返回的 `p0` 结构不同:`138-46` 的 `p0` 是价格字符串,`138-49` 的 `p0` 是含涨跌信息的对象。共用解析函数时按接入点分开处理,详见《今日油价返回字段对照:p89/p92/p0 与 ct 的含义与空值处理》。
- 省名要求标准写法,不接受前缀缩写,也不接受带「市」「省」后缀的写法。
- 平台层状态码与业务层状态码含义不同,建议分别判断并记录,便于定位问题。
## FAQ
**Q1:为什么照搬查询油价的代码去调查询行情会报错?**
查询行情(138-49)的 `prov` 是必填,不传会返回 `showapi_res_code=-1` 与 `showapi_res_error="must input prov field"`。查询油价(138-46)的 `prov` 是选填,不传也能返回全部 31 省。
**Q2:该用哪个接入点?**
要具体标号价格用查询油价(138-46),要涨跌幅和调价日用查询行情(138-49)。
**Q3:省名写「北京市」可以吗?**
不可以。2026-09-18 实测 `prov=北京市` 返回 `ret_code=-1` 与 `remark="参数错误,请输入所在省或直辖市的名称"`。用「北京」这样的标准省名。
**Q4:`prov=` 传空字符串算传了吗?**
实测与完全不传参数的结果一致,返回全国 31 个省份。
**Q5:查询行情不传 `prov` 会扣费吗?**
不会,实测 `showapi_fee_num=0`。
## 相关能力 / 下一步阅读
- [今日油价涨跌幅怎么查?查询行情接入点的调价日与涨跌率用法](https://www.showapi.com/guides/oilprice-trend-138)
- [今日油价:一次调用取回全国 31 省油价的做法](https://www.showapi.com/guides/oilprice-province-list-138)
- [今日油价返回字段对照:p89/p92/p0 与 ct 的含义与空值处理](https://www.showapi.com/guides/oilprice-fields-138)
- **本系列共 13 篇**:查看[今日油价指南总目录](https://www.showapi.com/guides/oilprice-guides-138)





