我正在尝试使用Google Maps API来获取位置,以及随后的附近地点。
我正在将编码的URL发送到API,例如,如果我搜索"拉斯维加斯,内华达州"发送给API的网址为:https://maps.googleapis.com/maps/api/geocode/json?address=Las+Vegas%2C+Nevada&client=gme-XXXXXXXXXX&signature=xxxxxxxxxxxxx。
此处, clientID 已修复且不会更改,但签名是根据地址" Las + Vegas%2C + Nevada"或任何搜索结果生成的
请注意,在网址中,作为地址编写的关键字采用UTF-8编码(空格由' +'替换,逗号由'%2C'编写)。
但是,在发送请求后API执行搜索的网址为:https://maps.googleapis.com/maps/api/geocode/json?address=Las+Vegas,+Nevada&client=gme-XXXXXXXXXX&signature=zzzzzzzzzzzzz。
请注意,这些空格仍然被编码为' +'但是此网址中有逗号,而不是'%2C'这导致API生成不同的签名,因为签名是基于地址生成的。 我因此而收到以下错误:
"无法验证请求。提供'签名'不适用于提供的客户ID或提供的客户端'无效。 根据URL检查签名:/ maps / api / geocode / json?address = Las + Vegas,+ Nevada& clientID = gme-XXXXXXXXXX& signature = zzzzzzzzzzzzz。 如果这与您请求的URL不匹配,请确保您的请求是正确的URL编码。了解详情:developers.google.com/maps/documentation/business/webservices/auth"
为什么逗号不在Maps API正在使用的网址中编码?
有没有办法解决这个问题?
答案 0 :(得分:0)
简单地将每个参数包装在下面的
中URLEncoder.encode(VARIABLE_NAME, "UTF-8")
这将导致它被发送“url safe”!
示例:
URL url = new URL("https://maps.googleapis.com/maps/api/geocode/json?address=" + URLEncoder.encode("Las Vegas, Nevada", "UTF-8") + &client=gme-XXXXXXXXXX&signature=xxxxxxxxxxxxx");