调用FedEx Track API查询追踪状态时遭遇422错误(INVALID.INPUT.EXCEPTION)求助
问题排查与修复
你的代码存在两个明确问题,直接导致了422输入错误:
1. 请求体传递格式错误
你调用requests.post时使用了data=payload,但请求头已经指定Content-Type: application/json。data参数会将Python字典编码为表单格式(application/x-www-form-urlencoded),而FedEx API要求接收JSON格式的请求体。
需将data=payload替换为json=payload,requests会自动完成字典到JSON字符串的序列化,匹配API的格式要求。
2. includeDetailedScans参数类型不符
FedEx Track API中includeDetailedScans是布尔类型参数,你传入的数字1不符合类型要求,需改为布尔值True(对应JSON结构中的true)。
修正后的代码
authoriztion_key = get_oauth() url = f"{sandbox_url}/track/v1/trackingnumbers" payload = { "trackingInfo": [ { "trackingNumberInfo": { "trackingNumber": f"{tracking_number}" } } ], "includeDetailedScans": True # 修改为布尔值 } headers = { 'Content-Type': "application/json", 'x-locale': "en_US", 'Authorization': f'Bearer {authoriztion_key}' } print(f"\nEnpoint: {url}") print(f'\nPayload: {payload}') print(f'\nHeaders: {headers}') # 替换data参数为json response = requests.post(url, json=payload, headers=headers) print(f'\nStatus: {response.status_code}') print(f'Response: {response.json()}')
如果修正后仍有问题,可进一步检查追踪号码是否符合FedEx沙箱环境的测试规则(沙箱需使用官方指定的测试追踪号,不能用真实生产环境号码)。
内容的提问来源于stack exchange,提问作者Wightbread727
相关产品推荐
相关产品推荐

