使用Golang和HereApi获取路线/地理位置周边充电站详情
解决HERE EV API凭证无效问题(同API Key可访问其他服务)
同一API Key能正常访问其他HERE服务,但调用EV充电站查询接口时返回“凭证无效”,大概率是权限配置、端点或代码细节问题,以下是具体解决步骤:
1. 确认API Key的EV服务权限
HERE的API Key默认不会开启所有服务权限,你需要在开发者后台检查该Key的权限列表,确保Electric Vehicle (EV) Charging Stations API已被启用——哪怕Key能用于地图、搜索等服务,EV服务可能需要单独开启。
2. 验证API端点有效性
你当前使用的https://ev-v2.cc.api.here.com/ev/stations.json是v2版本端点,需确认该版本是否仍兼容你的Key权限,或者是否需要切换到官方推荐的最新版本端点。
3. 修正代码中的问题
你的Go代码存在语法和最佳实践缺陷,可能间接导致请求异常,修正后的代码如下:
package main import ( "fmt" "io" "log" "net/http" "net/url" ) var apiKey = "XXXXXXXX" var latitude = 42.36399 var longitude = -71.05493 func main() { // 解析基础URL,避免手动拼接出错 baseURL, err := url.Parse("https://ev-v2.cc.api.here.com/ev/stations.json") if err != nil { log.Fatalln("解析URL失败:", err) } // 结构化设置查询参数 params := url.Values{} params.Set("prox", fmt.Sprintf("%f,%f,5000", latitude, longitude)) params.Set("connectortype", "31") params.Set("apiKey", apiKey) baseURL.RawQuery = params.Encode() res, err := http.Get(baseURL.String()) if err != nil { log.Fatalln("请求发送失败:", err) } defer res.Body.Close() // 必须关闭响应体,避免资源泄漏 body, err := io.ReadAll(res.Body) if err != nil { log.Fatalln("读取响应失败:", err) } fmt.Println(string(body)) }
修正点说明:
- 用结构化方式构建URL参数,避免手动拼接时的格式错误
- 替换废弃的
ioutil.ReadAll为标准库推荐的io.ReadAll - 添加
defer res.Body.Close()确保响应体资源被正确释放
4. 检查请求参数合法性
确认connectortype=31是当前API版本支持的有效值,不同版本的API对参数取值范围可能有差异,需对照官方文档验证。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

