Bing Maps Distance Matrix API调用失败问题求助
解决Bing Maps Distance Matrix API 400错误问题
我帮你分析了下你遇到的400错误,两个请求的问题其实都是请求方式/参数传递的小失误,具体修复方案如下:
1. GET请求的错误修复
你这里犯了一个很容易踩坑的小错误:明明构造了GET请求的URL,却用POST方法发送请求。另外你URL里的&是HTML转义后的符号,要替换成实际的&,否则服务器会把amp;当作参数的一部分,导致参数解析失败——这也是错误信息里提示“参数无效”的原因之一。
看你原来的错误代码:
url = "https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix?origins=47.6044,-122.3345;47.6731,-122.1185;47.6149,-122.1936&destinations=45.5347,-122.6231;47.4747,-122.2057&travelMode=driving&key={myKeyHere}" r = req.post(url) # 这里应该用req.get(url)
修复后的GET请求代码:
import requests as req # 替换{your_actual_key}为你的真实API密钥,同时把&换成& url = "https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix?origins=47.6044,-122.3345;47.6731,-122.1185;47.6149,-122.1936&destinations=45.5347,-122.6231;47.4747,-122.2057&travelMode=driving&key={your_actual_key}" r = req.get(url) j = r.json() print(j)
2. POST请求的错误修复
你的POST请求问题出在请求体的传递方式:你用了data=payload,但data参数是用来发送表单格式(application/x-www-form-urlencoded)的数据,而Bing Maps API要求的是JSON格式的请求体,必须用json=payload参数来传递(requests会自动帮你设置正确的Content-Type并序列化字典)。
看你原来的错误代码:
response = req.post(url,headers=headers, data=payload) # 这里应该用json=payload
修复后的POST请求代码:
import requests as req url = "https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix?key={your_actual_key}" headers = {"Content-Type": "application/json"} payload = { "origins": [ {"latitude": 47.6044, "longitude": -122.3345}, {"latitude": 47.6731, "longitude": -122.1185}, {"latitude": 47.6149, "longitude": -122.1936} ], "destinations": [ {"latitude": 45.5347, "longitude": -122.6231}, {"latitude": 47.4747, "longitude": -122.2057} ], "travelMode": "driving" } # 用json=payload替代data=payload response = req.post(url, headers=headers, json=payload) json_obj = response.json() print(json_obj)
额外确认点
从错误信息里的authenticationResultCode: 'ValidCredentials'可以确定你的API密钥是有效的,所以不用怀疑密钥的问题,只需要修正上面的请求方式/参数传递错误即可。
内容的提问来源于stack exchange,提问作者MFranc
相关产品推荐
相关产品推荐

