TOMTOM calculateReachableRange接口浏览器正常Python报错咨询
为什么TomTom API在浏览器和Python中调用结果不同?
这个问题挺常见的,核心原因是浏览器和Python请求的默认行为(尤其是请求头与API后端的校验逻辑)存在差异,导致TomTom API对参数的要求不一样。下面具体拆解:
API后端的参数校验策略差异:
TomTom的Reachable Range API在处理浏览器发起的请求时,会对avoidVignette/allowVignette参数做宽松处理(比如自动填充默认合法值);但对于非浏览器标识的请求(比如Pythonrequests库默认的python-requests/xxxUser-Agent),API会强制要求显式指定这两个参数中的一个。这是很多API服务商区分普通用户访问与程序调用的常见策略,针对不同场景做严格程度不同的参数校验。Python请求可能隐含的参数问题:
如果你用Python调用时不小心传递了与vignette相关的空参数(比如误写avoidVignette=却未赋值),也会触发这个错误——而直接在浏览器地址栏输入URL时不会出现这种情况。
解决办法
最稳妥的方式是显式添加avoidVignette或allowVignette参数,示例代码如下:
import requests url = "https://api.tomtom.com/routing/1/calculateReachableRange/50.97452,5.86605/json/" params = { "key": "[MYKEY]", "timeBudgetInSec": 3600, "avoidVignette": "false" # 也可选择设置 "allowVignette": "true" } response = requests.get(url, params=params) print(response.json())
你也可以尝试把Python请求的User-Agent改成浏览器标识,模拟浏览器请求:
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } response = requests.get(url, params=params, headers=headers)
不过更推荐显式指定参数的方式,因为依赖User-Agent的做法可能会随着API更新失效。
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

