Google 地理编码 API - REQUEST_DENIED
Posted
技术标签:
【中文标题】Google 地理编码 API - REQUEST_DENIED【英文标题】:Google Geocoding API - REQUEST_DENIED 【发布时间】:2011-03-13 20:33:33 【问题描述】:显然我不需要“地图 API 密钥”来使用“谷歌地理编码 API”,根据:
http://code.google.com/apis/maps/documentation/geocoding/index.html
但是,我得到了这个:
"status": "REQUEST_DENIED",
"results": [ ]
这是否意味着我的 IP 被阻止了?我能做些什么来克服这个问题?
【问题讨论】:
【参考方案1】:直到 2014 年底,此错误的常见来源是在请求中省略了强制的 sensor
参数,如下所示。然而,从那时起,这不再需要:
传感器参数
Google Maps API 以前要求您包含传感器参数,以指示您的应用程序是否使用传感器来确定用户的位置。不再需要此参数。
您是否在请求中指定了sensor
参数?
“REQUEST_DENIED”表示您的请求被拒绝,一般是因为缺少传感器参数。
sensor(必需)- 指示地理编码请求是否来自具有位置传感器的设备。此值必须为真或假
【讨论】:
这也引起了我的注意。我以为他们会将所有必需的参数放在列表的顶部! 提供sensor=true
和sensor=false
有什么区别?我的意思是如果调用计算机能够使用传感器什么?当我尝试sensor=false
时,我得到的结果与我尝试sensor=true
时的结果完全相同。那么为什么不简单地使用sensor=random(true/false)
呢?
@Pacerier:这是一个统计数据。它可能还影响到 Google 支付的任何许可费用。但谷歌极不可能说明为什么需要这种差异,特别是如果它是商业的。
我们偶尔会看到此错误,即使 提供了sensor
参数。我不认为这是一个限制问题,因为我们在请求之间至少等待了整整一秒钟,而且我们也没有接近每天 2500 个请求的限制。仍然不确定为什么我们偶尔会看到这种情况,因为稍后重复查询对我们有用......也许只是来自他们的常见“打嗝”?
我注意到不需要发送 API 密钥,我真的不明白,文档明确指出需要密钥,还说地理编码要与地图,否则是禁止的....但是,我尝试了一下,没有 API 密钥也可以正常工作【参考方案2】:
删除 API 密钥参数及其值。
例如。 https://maps.googleapis.com/maps/api/geocode/json?address=[YOUR ADDRESS]&sensor=true
【讨论】:
+1 非常令人沮丧,这很有效。 API 密钥实际上识别了我的应用程序......这允许 Google 绘制我的应用程序和用户的非常具体的图片。为什么 Google 会拒绝此类识别信息以支持匿名请求?? 非常感谢。这实际上奏效了。完全同意@RyanWheale。这太荒谬了。 有没有人知道为什么需要删除 API 密钥?这是否意味着特定 API 由“业务”部分管理,我需要向 Google 注册才能使其正常工作? (+1 顺便说一句!)。 密钥可能有更大的配额,但仅限于特定域。检查密钥是否适用于您使用的域。 如果您在业务应用程序中这样做,您就违反了 TOS。不要这样做。【参考方案3】:我发现在我的情况下,在添加 key=API_KEY 后调用没有安全协议(意思是:http)的服务会导致此问题。 改成 https 就解决了。
【讨论】:
这是我一直在寻找的答案。谢谢@shimshon【参考方案4】:我注意到,如果您没有正确地对您的地址进行 URL 编码,您还会收到一些地址的 REQUEST_DENIED。例如,在
123 Main St #B, Mytown, CA 94110
'#' 字符需要编码为 %23
【讨论】:
我认为这会导致“INVALID_REQUEST”? 这也是我的错误。大量搜索一个相当愚蠢的问题。【参考方案5】:对于那些在 2017 年或以后查看此页面的人,像我一样
不再需要传感器,我尝试并得到错误:
SensorNotRequired
我只需要激活我的Google Maps Geocoding API,现在看来这是必要的。
希望它能帮助像我这样的人。
【讨论】:
是的,必须启用地理编码。我花了 4 个小时才意识到这是问题所在。 如何激活这个? @Paypal,转到您项目的仪表板并向下滚动以查看您激活的 API。如果“Geocoding API”未激活,请点击顶部的“ENABLE APIs & SERVICES”,在左侧窗格索引中搜索“Maps”并选择“Geocoding API”。【参考方案6】:如果您只是复制并粘贴 Google 在其网站中提供的示例 URL http://maps.google.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true_or_false 由于传感器参数错误,它将失败。您应该将其更改为真或假,而不是他们写的那个。 也许是你遇到的错误,就像发生在我身上一样......
【讨论】:
【参考方案7】:我遇到了这个问题,我意识到我假设地理编码是 JS 地图 API 附带的。但是,它是一个单独的 API,我没有在云控制台中启用。启用它会立即修复它。
【讨论】:
现在应该是可以接受的答案。为我节省了几个小时! 我在拔头发几个小时后找到了这个答案。谢谢!!【参考方案8】:我在使用 drupal 7 Location 模块时也遇到了这个问题。自动填充所有空位置会导致此错误。手动执行对位置 api 的请求之一导致返回的 JSON 中出现此错误:
“与此 API 一起使用时,浏览器 API 密钥不能有引用者限制。”
解决问题很容易:创建一个没有任何限制的新密钥,并将其仅用于地理编码。
对于那些不熟悉 google api 密钥的人的注意事项:限制是指将使用 api 密钥的请求限制到特定域/子域。 (例如,只允许来自http://yourdomain.com 的请求)。
【讨论】:
在 Drupal 8 中,我能够使用我的子域进行解析。我正在使用地理编码器模块,在 /admin/config/system/geocoder 中,我选中了 googlemaps 设置下的“使用 SSL”框(在本地测试时不需要这样做)【参考方案9】:谷歌不让你的服务没有被这个帐户启用,这太糟糕了。尝试先启用它。 去这里https://console.developers.google.com/project 并创建一个激活场所服务的新项目,这可能会解决您的问题。
【讨论】:
【参考方案10】:正如您所说,这可能意味着您的 IP 地址已被阻止。我会确保您在 Geocoding API 请求的查询字符串中指定 key 参数。
https://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=Placename&key=XXxxxXXxXxxxxXXxx
此外,如果您在开发者控制台中设置了 IP 地址限制,请确保您已允许正确的 IP 地址,只需单击列表中的项目,您就会看到允许的 IP。
如果您仍然遇到问题,您可能需要考虑从 Google 的响应中打印出 status
和 error_message
元素的值,您会看到如下内容:
REQUEST_DENIED - This IP, site or mobile application is not authorized to use this API key. Request received from IP address 123.4.5.678, with empty referer
如果它没有提及 IP 地址限制,它很可能会为您提供有关问题的足够信息,以便 Google 进行修复。
【讨论】:
【参考方案11】:对于遇到此问题的任何人,我刚刚发现地理编码 API 不能与具有引荐来源限制的 API 密钥一起使用。只需删除所有推荐人限制,您就可以了。
如果您使用的任何其他 API 确实允许具有引用限制的密钥(例如 Maps JS API),最好创建一个没有限制的第二个密钥以专门用于地理编码,因为其他 API 可能会显示您的密钥公开,其他人可以开始在自己的网站上使用它。
【讨论】:
我设置了推荐人,使用 JS API 和地理编码,我没有这个问题。 嗯,也许谷歌现在改变了 API,但是当我发布它时这是真的 Geocoder/JS:我有一个 js 脚本,我在 5 或 6 年前(就在我们的 v3 出现之后)编写的,它在许多网站上运行良好。使用键设置后,我收到一个非特定错误,发现问题出在纬度/经度的格式上。我使用的是由 results[0].geometry.location 生成的变量,例如,我在查询字符串中使用了 (-34.397, 150.644)。不再可接受。我必须将该变量值转换为字符串并删除括号。 听起来我们只是在谈论不同的问题。就我而言,我有一个脚本使用了一个具有引用限制的键,并且收到了 REQUEST_DENIED 错误。我在不触及脚本的情况下删除了引用者并修复了它。 是的,不同的问题。我只是想我会把它扔在那里,因为你说“也许谷歌改变了”,这是一个完全出乎意料且显然没有记录的改变的一个很好的例子,让我挠了好几个小时。很抱歉有任何混淆。我的第一个答案是对您的陈述的实际回应。【参考方案12】:如果您尚未使用信用卡配置结算帐户,API 将无法工作。谷歌现在非常渴望金钱并且不开放更多你的产品“免费”。显然,他提供了一个免费的有限访问次数的咨询,并且超过这个访问,计费非常高。
https://cloud.google.com/maps-platform/pricing
【讨论】:
【参考方案13】:如果给定的解决方案均未修复该错误,则问题可能与 Google Cloud Billing 设置有关。您必须在 billing/enable 上启用 Google Cloud 项目的结算功能。
Learn more
"error_message" : "You must enable Billing on the Google Cloud Project at https://console.cloud.google.com/project/_/billing/enable Learn more at https://developers.google.com/maps/gmp-get-started",
"results" : [],
"status" : "REQUEST_DENIED"
【讨论】:
【参考方案14】:Google 正在返回一条非常有用的错误消息,这有助于纠正问题!
Dim Request As New XMLHTTP30
Dim Results As New DOMDocument30
Dim StatusNode As IXMLDOMNode
Request.Open "GET", "https://maps.googleapis.com/maps/api/geocode/xml?" _
& "&address=xxx", False
Request.Send
Results.LoadXML Request.responseText
Set StatusNode = Results.SelectSingleNode("//status")
Select Case UCase(StatusNode.Text)
Case "REQUEST_DENIED"
Debug.Print StatusNode.NextSibling.nodeTypedValue
...
错误信息示例
消息 1: 对此 API 的请求必须通过 SSL。使用“https://”加载 API 而不是“http://”。
消息 2: 服务器拒绝了请求:您必须使用 API 密钥来验证对 Google Maps Platform API 的每个请求。如需更多信息,请...
【讨论】:
【参考方案15】:我刚刚在我的谷歌云平台上启用了我的地理编码 API、地理定位 API 和地点 API(我在其中生成了我正在使用的 API 密钥)并且它工作正常。
【讨论】:
以上是关于Google 地理编码 API - REQUEST_DENIED的主要内容,如果未能解决你的问题,请参考以下文章