在Python中调用Amadeus航班可用性API遇400错误求助
Amadeus航班可用性API POST请求返回400错误的排查与解决建议
核心问题分析
你遇到的400错误大概率是请求体格式不符合接口要求,结合代码来看主要有以下问题:
- 请求体结构不匹配:
/v1/shopping/availability/flight-availabilities接口要求接收包含flightOffers数组的JSON结构,但你直接传入了/v2/shopping/flight-offers返回的单条航班数据,结构不兼容。 - 错误排查信息无效:当前代码打印的
error.response.request.params是GET请求的参数,POST请求的实际内容在body里,这个打印信息无法帮你定位问题。
具体解决步骤
修正请求体结构
把单条航班数据包裹到flightOffers数组中,这是可用性接口要求的必填结构:request_body = {"flightOffers": [flights.data[0]]}完善错误排查信息
修改异常处理代码,打印实际发送的请求体和接口返回的错误详情,方便定位问题:except ResponseError as error: print('请求头: ', error.response.request.headers) print('发送的请求体: ', error.response.request.body) print('接口返回错误: ', error.response.result)验证数据完整性
先打印flights.data[0]的完整内容,对比Amadeus官方文档中可用性接口的请求体示例,确认是否有缺失的关键字段(比如id、itineraries等),如果有缺失需要补充后再发送请求。
修改后的完整代码
from amadeus import Client, ResponseError, Location amadeus = Client( client_id='My ID', client_secret='My Secret') try: flights = amadeus.get('/v2/shopping/flight-offers', originLocationCode="GIG", destinationLocationCode="ATL", departureDate="2023-01-31", nonStop="true", travelClass="BUSINESS", adults=1) # 构造符合接口要求的请求体 request_body = {"flightOffers": [flights.data[0]]} print("构造的请求体:", request_body) except ResponseError as error: print(error) exit() try: availability = amadeus.post('/v1/shopping/availability/flight-availabilities', request_body) print(availability.result) except ResponseError as error: print('请求头: ', error.response.request.headers) print('发送的请求体: ', error.response.request.body) print('接口返回错误: ', error.response.result)
内容的提问来源于stack exchange,提问作者Francisco Lamas
相关产品推荐
相关产品推荐

