Betfair History API的DownloadListOfFiles接口调用失败,求解决方法
修复Betfair Historic Data API
DownloadListOfFiles 请求问题 咱们一步步拆解你调用Betfair历史数据API时遇到的问题,逐个修复:
1. 先解决最明显的问题:截断的JSON请求体
你给出的jsonrpc_req末尾是mar...,明显被截断了——JSON格式要求结构完整、语法正确,残缺的请求体肯定会被API拒绝解析。
首先补全完整的JSON结构,确保所有引号配对、逗号正确,并且包含API要求的字段。比如一个符合规范的请求体应该是这样的:
{ "sport": "Horse Racing", "plan": "Basic Plan", "fromDay": 1, "fromMonth": 3, "fromYear": 2017, "toDay": 31, "toMonth": 3, "toYear": 2017, "eventId": null, "eventName": null, "marketType": null, "marketName": null, "countryCode": null, "fileType": "results" }
你可以根据自己的需求调整字段(比如指定marketType过滤特定赛事类型),但要保证JSON语法完全正确——可以用在线JSON校验工具快速检查。
2. 使用正确的HTTP请求方法
DownloadListOfFiles接口需要用POST方法发送请求,而不是默认的GET。如果你用Python的requests库,一定要用requests.post()而不是requests.get()。
这里给你一个完整的可运行示例代码:
import requests # 接口地址 url = 'http://historicdata.betfair.com/api/DownloadListOfFiles' # 替换成你的有效会话令牌 session_token = "YOUR_VALID_SESSION_TOKEN" headers = { 'X-Authentication': session_token, 'content-type': 'application/json' } # 完整的请求参数 request_body = { "sport": "Horse Racing", "plan": "Basic Plan", "fromDay": 1, "fromMonth": 3, "fromYear": 2017, "toDay": 31, "toMonth": 3, "toYear": 2017, "eventId": None, "eventName": None, "marketType": None, "fileType": "results" } try: # 发送POST请求 response = requests.post(url, headers=headers, json=request_body) # 主动抛出HTTP状态码错误(比如401、400) response.raise_for_status() # 打印API返回的结果 print("请求成功,返回数据:") print(response.json()) except requests.exceptions.RequestException as e: print(f"请求出错:{str(e)}") # 打印响应内容,方便排查具体错误 if response: print(f"API返回详情:{response.text}")
3. 验证会话令牌的有效性
确保你的session_token是通过Betfair官方认证接口合法获取的,并且没有过期。如果令牌无效,API会返回401 Unauthorized这类错误,这时你需要重新获取有效的会话令牌。
4. 检查参数的合法性
- 确认
plan字段的值和你的订阅计划完全匹配:比如"Basic Plan"是否是API认可的取值,避免拼写错误(比如大小写、空格问题)。 - 日期范围要合法:你指定的2017年3月1日到31日是没问题的,但要保证
from日期不晚于to日期。 - 不需要过滤的字段保持
null(Python里用None)是允许的,但要确认API文档中这些字段是否接受null值。
调试小技巧
如果还是遇到问题,一定要打印出响应的状态码和完整响应内容——API通常会返回具体的错误信息(比如JSON解析失败、参数无效、认证失败),这些信息是定位问题的关键。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

