【问题标题】:Python API Calling Random.orgPython API 调用 Random.org
【发布时间】:2025-12-09 04:15:01
【问题描述】:

所以我是 API 新手,但我正在尝试更多地练习它们。我的连接正常(200),但每当我尝试打印结果时,我都会收到此错误:

{"jsonrpc":"2.0","error":{"code":-32700,"message":"解析错误","data":null},"id":null}

这是我的代码,API 密钥已编辑:

    url = 'https://api.random.org/json-rpc/1/invoke'

    data = {'jsonrpc':'2.0','method':'generateIntegers','params': {'apiKey':'mykeygoeshere','n':10,'min':1,'max':10,'replacement':'true','base':10},'id':24565}

    response = requests.get(url,data)

    print(response.text) 

感谢任何帮助

【问题讨论】:

  • 如果您查看their own implementation,您可以看到他们使用的是POST,而不是GET,并且首先通过json.dumps() 运行data 参数。他们还设置了标题,您可能也应该这样做。但是我不确定他们的代码是最新的 - 它已经 5 岁了。不过,既然您想了解更多有关 API 的信息,那么如果您想了解如何正确使用他们自己的 API,这应该会很有帮助。
  • 谢谢,您的评论成功了,只需要更改请求类型并调用 json.dumps(data)

标签: python json api random request


【解决方案1】:
    import requests
    import json

    url = 'https://api.random.org/json-rpc/1/invoke'

    data = {'jsonrpc':'2.0','method':'generateIntegers','params': {'apiKey':'mykey','n':10,'min':1,'max':10,'replacement':'true','base':10},'id':24565}

    params = json.dumps(data)

    response = requests.post(url,params)

    print(response.text)

【讨论】:

  • 这不适用于当前版本的 API
【解决方案2】:

此代码适用于版本 2

import requests
import json

raw_data = {
    "jsonrpc": "2.0",
    "method": "generateIntegers",
    "params": {
        "apiKey": "your-api-key",
        "n": 6,
        "min": 1,
        "max": 6,
        "replacement": True
    },
    'id':1
}

headers = {'Content-type': 'application/json','Content-Length': '200', 'Accept': 'application/json'}

data=json.dumps(raw_data)

response = requests.post(
    url='https://api.random.org/json-rpc/2/invoke',
    data=data,
    headers=headers
    )

print(response.text)

【讨论】:

  • 请在您的代码中添加一些解释。
【解决方案3】:

因此,对于 random.org,您必须向 url 发出 post 请求

https://api.random.org/json-rpc/2/invoke

使用存储在变量 raw_data 中的数据,但首先您应该将字典对象转换为 json 格式,这可以使用该行来完成

data=json.dumps(raw_data)

headers 变量存储 POST 请求的格式

请求是使用 requests 模块的 post 方法完成的

然后我们得到json格式的响应,通过

转换为可打印格式
print(response.text)

确保将您的 api_key 存储在 raw_data 变量中

【讨论】: