如何使用你的CoinMarketCap API密钥进行请求验证

 风险提示:防范以"数字货币""区块链"名义进行非法集资的风险

领域OK报道:

欧易
欧易(OKX)

全球三大交易所之一,注册领50U数币盲盒,币圈常用的交易平台!

币安
币安(Binance)

币安是世界领先的数字货币交易平台,注册领100U。

如何通过 CoinMarketCap API 密钥验证请求

了解如何正确使用 X-CMC_PRO_API_KEY 标头传递 CoinMarketCap API 密钥,理解标头方法与查询字符串方法在安全性上的差异,并修复最常见的 401 错误。

精简版:学习如何安全地传递 CoinMarketCap API 密钥,为何标头方式优于查询字符串,以及如何通过代码示例修复 401、402 和 403 错误。

引言

对 CoinMarketCap Pro API 的每次请求都需要一个有效的 API 密钥。传递密钥有两种方式,选择哪种方式远比看上去更重要。一种方法适用于生产环境,另一种则会悄悄地将密钥泄露到日志和浏览器历史记录中。

本指南将介绍这两种方法,展示多种语言的认证代码,并解释如何诊断因认证错误导致的 401、402 和 403 错误。

两种方法

方法一:自定义标头(推荐)

在名为 X-CMC_PRO_API_KEY 的自定义 HTTP 标头中传递密钥:

curl -G ‘https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest’ \
-H ‘X-CMC_PRO_API_KEY: YOUR_API_KEY’ \
-H ‘Accept: application/json’

这是所有生产环境下的推荐方法。密钥位于请求标头中,不会出现在 URL、服务器访问日志、浏览器历史记录或引用来源标头中。

方法二:查询字符串参数(仅限便捷使用)

在名为 CMC_PRO_API_KEY 的 URL 参数中传递密钥:

curl ‘https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?CMC_PRO_API_KEY=YOUR_API_KEY’

这种方法虽然可行,但密钥会成为 URL 的一部分,进而出现在服务器访问日志、浏览器历史记录和引用来源标头中。仅适用于快速一次性测试,切勿用于生产环境。

不同语言中的认证方式

Python

import os
import requests

HEADERS = {
“Accept”: “application/json”,
“X-CMC_PRO_API_KEY”: os.getenv(“CMC_API_KEY”),
}

response = requests.get(
“https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest”,
headers=HEADERS,
params={“start”: “1”, “limit”: “10”, “convert”: “USD”},
)

response.raise_for_status()
data = response.json()

Node.js

const response = await fetch(
“https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?start=1&limit=10&convert=USD”,
{
headers: {
“Accept”: “application/json”,
“X-CMC_PRO_API_KEY”: process.env.CMC_API_KEY,
},
}
);
const data = await response.json();

Ruby

require “net/http”
require “json”

uri = URI(“https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest”)
uri.query = URI.encode_www_form(start: “1”, limit: “10”, convert: “USD”)

request = Net::HTTP::Get.new(uri)
request[“Accept”] = “application/json”
request[“X-CMC_PRO_API_KEY”] = ENV[“CMC_API_KEY”]

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }
data = JSON.parse(response.body)

注意,在每种语言中,密钥都从环境变量读取,而不是直接写在代码中。这样可以避免密钥被纳入版本控制

常见认证错误

HTTP 401 未授权

请求缺少有效的 API 密钥,或密钥无效。

错误代码 -1001
消息 – This API Key is invalid
原因 – 密钥错误或已被重新生成

错误代码 -1002
消息 – API key missing
原因 – 未包含标头或查询参数

检查 JSON 响应中的 status 对象以获取具体错误代码:

{“status”: {
“error_code”: 1002,
“error_message”: “API key missing.”
}}

HTTP 402 需要付款

您的套餐有逾期欠款或尚未激活。请在开发者门户的账单选项卡中解决。

错误代码 -1003
消息 – Your API Key must be activated

错误代码 -1004
消息 – Your API Key’s subscription plan has expired

HTTP 403 禁止访问

密钥有效,但您的套餐不包含所调用的端点。

错误代码 -1005
消息 – An API Key is required for this call

错误代码 -1006
消息 – Your API Key subscription plan doesn’t support this endpoint

如果遇到 403 错误,请查看定价页面,了解各套餐支持的端点映射。

API 密钥从何获取

在官网注册即可。创建账户后,API 密钥立即可用。免费的基础版套餐提供 30 多个端点,每月 15,000 次调用额度。

如果您想在创建账户前测试 API,无需密钥的 Trial Pro API 允许您调用 35 多个端点,无需注册。

安全检查清单

将密钥存储在环境变量中。

切勿将密钥硬编码在源代码中,也绝不要提交到版本控制。

在生产环境中,切勿通过查询字符串传递密钥,否则会泄露到日志和浏览器历史记录中。

切勿在客户端浏览器 JavaScript 中调用 API,否则密钥会对任何打开网络选项卡的人可见。应通过自己的后端进行代理。

密钥一旦暴露,请立即轮换。在开发者门户中重新生成密钥,旧密钥会在轮换后立即失效。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...