调用UK政府ContractsFinder API返回404错误,求技术排查帮助
问题:调用英国政府ContractsFinder API返回404错误
我尝试通过英国政府ContractsFinder API获取合同数据,编写了如下Python代码,但请求返回404错误。请问我的API调用存在什么问题?这并非我的专业领域,可能存在低级错误。
import requests base_url = "https://www.contractsfinder.service.gov.uk/api/rest/2/search_notices" keyword = "analysis" params = { "searchCriteria": { "types": [ "Contract" ], "keyword": "Analysis", "queryString": None, "regions": "Wales,South East", "publishedFrom": "01/06/2023", "publishedTo": None, #"deadlineFrom": null, #"deadlineTo": null, #"approachMarketFrom": null, #"approachMarketTo": null, #"awardedFrom": null, #"awardedTo": null, #"isSubcontract": null, "suitableForSme": True, #"suitableForVco": false, #"awardedToSme": true, #"awardedToVcse": false, #"cpvCodes": null }, "size": 1000 } response = requests.get(base_url, params=params) if response.status_code == 200: data = response.json() # Process the retrieved data as needed print(data) else: print("Request failed with status code:", response.status_code)
解决方法
你的代码存在两个关键问题,导致了404错误:
- 请求方式错误:ContractsFinder的搜索API要求使用
POST请求,而非GET。GET无法正确传递嵌套的searchCriteria参数结构,服务器无法解析你的请求,因此返回404。 - 参数格式不匹配:
- 日期格式需改为
YYYY-MM-DD,而非DD/MM/YYYY,比如"publishedFrom": "2023-06-01" - 布尔值要传小写字符串
"true"/"false",不能用Python原生的True/False,因为API接收JSON格式的字符串值 - 无需保留
None值,直接移除无效参数即可
- 日期格式需改为
修改后的可运行代码:
import requests base_url = "https://www.contractsfinder.service.gov.uk/api/rest/2/search_notices" payload = { "searchCriteria": { "types": ["Contract"], "keyword": "Analysis", "regions": "Wales,South East", "publishedFrom": "2023-06-01", "suitableForSme": "true" }, "size": 1000 } # 使用POST请求传递JSON payload response = requests.post(base_url, json=payload) if response.status_code == 200: data = response.json() print(data) else: print("请求失败,状态码:", response.status_code) # 打印响应内容查看具体错误信息 print(response.text)
额外注意事项:
- 当前v2版本的搜索端点
/api/rest/2/search_notices是正确的,无需修改 - 若添加更多筛选条件(如
publishedTo),同样要遵循YYYY-MM-DD格式 - 遇到错误时打印
response.text,能获取服务器返回的具体错误描述,帮助快速排查问题
内容的提问来源于stack exchange,提问作者A Rob4
相关产品推荐
相关产品推荐

