【问题标题】:Python programming using API errorPython 编程使用 API 错误
【发布时间】:2018-04-07 05:47:02
【问题描述】:

我是编程 API 的新手,我正在尝试编写我的机器人以在网站上运行,这是 API Crypto-games API doc site 的文档,但我在执行位置投注命令时得到了 400 error并且错误不会打印出错误内容,只是错误代码。这是他们在网站上提供的内容

URL: /v1/placebet/:coin/:key
{ "Bet": 0.00001024, "Payout": 2.0, "UnderOver": true, "ClientSeed": "somerandomseed" }
UnderOver is target result. Example: < 49.600 or > 50.399`

这是他们提供的示例 Javascript

var input = { Bet: 0.00001024, Payout: 2.0, UnderOver: true,
ClientSeed: "somerandomseed" };
$.ajax({
  url: "https://api.crypto-games.net/v1/placebet/BTC/7Ii8vdPBUBfTPHcuzkHuhftkGD43iWwbFkdwBQa7GL8R4AwBr3",
  data: JSON.stringify(input),
  dataType: "json",
  contentType: "application/json",
  type: "POST",
  success: function (r) {
        console.log(r);
  }
});

这是我为运行 placebet 命令而编写的 Python 代码

import requests
import json

parameter = {"Bet": 10.0000000, "Payout":2.0, " >50.399": True, "ClientSeed": "CTThgTlac54qK2lahvLicrFlJsJmSIEkRMt4VcuN"}
parameters = json.dumps(parameter)
response = requests.get("https://api.crypto-games.net/v1/placebet/PLAY/XxxMyAPIHerexxX", params = parameters)
print(response.content)
print(response.status_code)

我尝试在没有json.dumps() 的情况下运行它,但我仍然得到相同的输出。有人可以指出我做错了什么,欢迎所有批评和建议。

【问题讨论】:

  • 您不需要json.dumps(),但您需要将其改为requests.post 函数调用。
  • 谢谢你,我不小心,我需要更加小心。

标签: python json api


【解决方案1】:

根据Place bet 文档(以及粘贴的示例代码),它应该是POST 请求,而不是GET

response = requests.post(...)

编辑:我认为您在请求中的 params 应该是 data,因为参数与 URL 一起发送并且字符串化数据进入请求正文/数据。 (json.dumps() 是正确的。)

parameters = json.dumps(parameter)
response = requests.post("https://api.crypto-games.net/v1/placebet/PLAY/XxxMyAPIHerexxX",
                         data=parameters)

如果您使用的是更新版本的requests,则可以在不发送JSON data in the body 的情况下发送requests

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}

>>> r = requests.post(url, json=payload)

编辑 2:

"UnderOver": true 在要发送的数据中是强制性的。他们的例子不清楚应该如何将其转换为数字。我认为这是Bet 的值(所以+/- 下注金额)。所以试试:

parameter = {"Bet": 10.0000000, "Payout":2.0, "UnderOver": True, "ClientSeed": "CTThgTlac54qK2lahvLicrFlJsJmSIEkRMt4VcuN"}

另外,不要使用 requests.post(url, json=payload) 方法,因为它将 Python 的 True 转换为 js 字符串 "True" 而不是 js 布尔值 true。所以坚持使用parameters = json.dumps(parameter) 方法,但仍然作为数据。

Wrt "Content-Type" 错误,将此添加到您的请求中:

headers = {'Content-Type': 'application/json'}
response = requests.post("https://api.crypto-games.net/v1/placebet/PLAY/XxxMyAPIHerexxX",
                         data=parameters,
                         headers=headers)

【讨论】:

  • 我尝试切换,但我仍然收到invalid parameter 错误,我猜它与UnderOver 有关我不完全理解如何表示它&gt;&gt;&gt; parameter = {"Bet": 10.0000000, "Payout":2.0, "Over": True, "ClientSeed": "CTThgTlac54qK2lahvLicrFlJsJmSIEkRMt4VcuN"} @987654346 @
  • 对不起上面的评论,看起来很乱,但是当我使用data = parameters时,我得到了这个错误The request contains an entity body but no Content-Type header. The inferred media type 'application/octet-stream' is not supported for this resource.
  • 我已编辑添加标题参数。从您的 URL 中,您投注的硬币是名为 “PLAY” 的硬币吗?而你没有使用parameters = json.dumps(parameter),你使用了paramter,没有s
  • 你今天对我很有帮助,非常感谢你,它现在正在工作。我把"UnderOver": True" 留下了,我猜T/F 是under/over。
猜你喜欢
  • 1970-01-01
  • 2013-01-26
  • 2012-11-26
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 2018-08-08
相关资源
最近更新 更多