api 调用中明确包含缺少的关键字参数

missing keyword parameter is clearly included in api call

我正在尝试设置对 Amadeus 的基本 API 调用。所有正确的参数都包含在内,我为每次调用获取一个新令牌。

这是一个 React/Flask 应用程序。

这是我在 app/routes.py 中的端点:

@app.route('/search', methods=['GET'])
@cross_origin(origin='*')
def get_flights():

    api_key = os.environ.get('amadeus_api_key', None)
    api_secret = os.environ.get('amadeus_api_secret', None)

    # first, you must get an access token using your Amadeus credentials
    token_request = requests.post(
        'https://test.api.amadeus.com/v1/security/oauth2/token',
        data = {
            'grant_type': 'client_credentials',
            'client_id': api_key,
            'client_secret': api_secret
        }
    )
    token = token_request.json()['access_token']
    bearer = 'Bearer {}'.format(token)

    locations = requests.get(
        'https://test.api.amadeus.com/v1/reference-data/locations',
        headers = {
            'Authorization': bearer 
        },
        data = {
            'subType': 'AIRPORT',
            'keyword': 'BOS'
        }
    )
    print(locations.json())

    # example:
    # https://test.api.amadeus.com/v1/reference-data/locations
    # ?subType=AIRPORT&keyword=BOS

    return jsonify({'token': token})

这是错误:

{'errors': [{'status': 400, 'code': 32171, 'title': 'MANDATORY DATA MISSING', 'detail': 'Missing mandatory query parameter', 'source': {'parameter': 'keyword'}}]}

正如您在 /search 端点中看到的那样,关键字参数显然包含在内。

什么给了?我错过了什么吗?

获取位置的请求未正确构建,因为它发送 subTypekeyword 作为主体而不是查询参数。根据 requests 文档,您需要使用 params:

    locations = requests.get(
    'https://test.api.amadeus.com/v1/reference-data/locations',
    headers = {
        'Authorization': bearer 
    },
    params = {
        'subType': 'AIRPORT',
        'keyword': 'BOS'
    }
)