Gemini API 中的简单 JSON 解码错误不知从何而来

Simple JSON Decode Error in Gemini API Started Out of Nowhere

我正在尝试使用 Gemini 交易 API。我给自己发了一个 API 密钥和一个秘密,在配置我的环境后,我在通过 pip 设置和安装请求时遇到了很多问题,我使用他们的示例代码创建了一个简单的脚本来读取我的最近的交易。这是脚本,减去我的 API 键:

#!/usr/bin/env/ python

import requests
import json
import base64
import hmac
import hashlib
import datetime, time

url = "https://api.sandbox.gemini.com"

gemini_api_key = "master-xxx"
gemini_api_secret = "xxx".encode()

t = datetime.datetime.now()
payload_nonce =  str(int(time.mktime(t.timetuple())*1000))
payload =  {"request": "/v1/mytrades", "nonce": payload_nonce}
encoded_payload = json.dumps(payload).encode()
b64 = base64.b64encode(encoded_payload)
signature = hmac.new(gemini_api_secret, b64, hashlib.sha384).hexdigest()

request_headers = {
    'Content-Type': "text/plain",
    'Content-Length': "0",
    'X-GEMINI-APIKEY': gemini_api_key,
    'X-GEMINI-PAYLOAD': b64,
    'X-GEMINI-SIGNATURE': signature,
    'Cache-Control': "no-cache"
    }

response = requests.post(url, headers=request_headers)

my_trades = response.json()
print(my_trades)

起初,它会 运行,但给我一个错误,说我没有指定帐户。然后,根本没有改变任何东西,它突然完全停止工作。因此,虽然我在访问 API 时仍然遇到某种问题,但我什至无法再找到错误来找出原因。现在我得到的是 JSON 解码错误,如下所示:

Traceback (most recent call last):
  File "c:\Users\david\Desktop\Code Projects\GeminiTrader\GeminiTrader-v0.1.py", 
line 33, in <module>
    my_trades = response.json()
  File "C:\Users\david\AppData\Local\Programs\Python\Python39\lib\site-packages\requests-2.25.1-py3.9.egg\requests\models.py", line 900, in json
    return complexjson.loads(self.text, **kwargs)
  File "C:\Users\david\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:\Users\david\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\david\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

是什么导致了这个 json 解码问题?为什么以前 API 只是因为帐户参数错误而拒绝了我的请求时没有出现?为什么我没有修改代码就突然变成这个错误了?我该如何解决?我一直在安装请求和让它工作时遇到问题,也许我在那个过程中搞砸了什么?

当然,在修复此问题后,我将有许多新问题需要修复,因为关于此 API 的文档非常糟糕。对推进该项目的任何帮助将不胜感激!谢谢!

当您调用 API 时,您的 API 调用可能会失败并且 returns 只是字符串或空响应。我建议您首先添加对响应状态代码的检查,如下所示,然后处理 json 数据。

    data = requests.post() 
    if data.status_code != 200:
        raise Exception("Error", data.reason) 
   json_data = data.json()