什么原因导致“Google Maps API 服务器拒绝了您的请求。发现此 API 项目的内部错误。”?
Posted
技术标签:
【中文标题】什么原因导致“Google Maps API 服务器拒绝了您的请求。发现此 API 项目的内部错误。”?【英文标题】:What causes "The Google Maps API server rejected your request. An internal error was found for this API project."? 【发布时间】:2014-03-22 23:05:52 【问题描述】:这是使用静态地图 API。
我有一个带有 3 个 img 标签的网页,每个标签都是对静态 maps API 的调用,(注意,这当然不是真正的 api 密钥)。
这 3 个标签是相同的,只是三个图像的缩放比例分别为 10、13 和 16。
API 密钥来自启用了静态地图 API 并配置并启用了计费的项目。
我总共发送了大约 60 个请求(这是一个全新的开发项目,所以我才刚刚开始)。
我看到的是,有时会显示所有三张地图。在其他时候,一张(三张中的随机一张)地图因
而失败403 “Google Maps API 服务器拒绝了您的请求。发现此 API 项目的内部错误。”
所以如果我刷新页面 5 次,即 15 个请求,我会得到大约 4 次失败和 11 次成功。
那么,为什么 Google 地图会随机拒绝一些带有此 403 的请求?
【问题讨论】:
链接给出:“Google Maps API 服务器拒绝了您的请求。提供的 API 密钥无效。” 那是因为我混淆了我的 API 密钥 我无法复制,但可以尝试查看。您可以在静态地图下的code.google.com/p/gmaps-api-issues 提出问题,并确保(此处或此处)提供您的数字项目 ID,确认您使用的密钥以 JGk 结尾,并确保您在项目中的联系电子邮件是正确的。如果您不愿意分享您的数字项目 ID(这样做是安全的),那么您需要提供一种我可以与您联系的方式。 排除key=API_KEY
参数时是否也会出现同样的错误?
@TylerEich 没有密钥,它可以正常工作,直到我按预期获得红色 X 地图时用完配额。
【参考方案1】:
您确定您的 API 密钥正确吗?
来自https://developers.google.com/maps/documentation/staticmaps/#Limits:
Google 静态地图 API 具有以下使用限制:
没有 API 密钥:
每个 IP 地址每 24 小时有 1,000 个静态地图请求。 每个 IP 地址每分钟 50 个静态映射请求。这意味着,如果您的单个页面包含超过 50 个地图,则该页面将超过此限制。
可以按常见问题解答中当前列出的价格按每个应用程序购买额外的图像请求。额外配额是通过 API 控制台购买的,并且需要使用 API 密钥。
如果用户超出这些限制,服务器将返回 HTTP 403 状态并显示下图表示已超出配额:
似乎每分钟 50 张地图可以解释您的随机 403 错误。
如果这不是问题,我会向 Google Geo 支持提交支持票,因为它被标记为“内部错误”。
【讨论】:
是的,我确定它是正确的,正如我在问题中所说,在 15 个左右的 GET 中,随机 4 个会失败,11 个会成功。如果 API 密钥错误,错误将是“提供的 API 密钥无效。”。我不是每分钟做 50 个,我在一个页面中做 3 个,然后花 2 分钟喃喃自语“wtf”,然后再试一次。此外,您引用的文本没有 API 密钥。我包括一个 API 密钥。而且我没有收到配额图像,我只是收到 403。如何向 Google Geo 支持提交票证? 有道理,觉得简单的东西值得问。你有登录google.secure.force.com 吗?这就是我提交罚单的方式。 Static API subscription in your dev console is the problem 有机会吗? Another post 说了类似的话。 我没有企业支持。这是暂时的。不久前,我所有的请求都成功了。现在,他们都失败了。所有这一切都无需我更改测试页面中的任何内容。我的应用只订阅了静态地图 API,我认为这是正确的。如果我删除 API 密钥,它当然可以工作,但是我会受到配额限制。【参考方案2】:所以如果我刷新页面 5 次,即 15 个请求,我会得到大约 4 次失败和 11 次成功。
我认为您的请求在短时间内超过了限制。 我不确定你如何显示地图,但我建议你连续加载地图。
例如:使用 javascript 和 https://github.com/caolan/async
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html,body
height: 100%;
margin: 0;
padding: 0
</style>
<script type="text/javascript" src="async.js"></script>
<script type="text/javascript">
function loadImg(params, callback)
var url = "http://maps.googleapis.com/maps/api/staticmap?" +
params + "&zoom=1&size=100x100" +
"&sensor=false&key=YOUR_KEY_IS_HERE";
var img = new Image();
img.src = url;
img.onload = function()
document.body.appendChild(img);
callback();
;
img.onerror = function()
callback(url);
function loadMaps()
var urlList = [
"markers=label:0|LosAngles",
"markers=label:1|NewYork",
"markers=label:2|SanFrancisco",
"markers=label:3|Frorida",
"markers=label:4|Arizona",
"markers=label:5|Ohaio",
"markers=label:6|Hawai",
"markers=label:7|Texus",
"markers=label:8|Seattle",
"markers=label:9|Florida",
"markers=label:A|kansas",
"markers=label:B|utah",
"markers=label:C|iowa",
"markers=label:D|oregon",
"markers=label:E|alaska",
"markers=label:F|Washington D.C"
];
async.eachSeries(urlList, loadImg, function(err)
if (err)
console.log("error", err);
else
console.log("all image are loaded");
);
</script>
</head>
<body onload="loadMaps()">
</body>
</html>
【讨论】:
什么时间限制? Google 文档建议一个页面上的 49 个 IMG 标签可以工作。我只用了三个 web.archive.org/web/20140210073631/https://… "Google 静态地图 API 的使用限制如下:每个 IP 地址每分钟 50 个静态地图请求。这意味着如果您有一个包含超过 50 个地图的页面,则该页面会超过这个限制。”这暗示着一个小于 50 的页面可以工作,只要它每分钟请求不超过一次。 您是否仍然收到 403 错误?如果是这样,让我给你的示例页面网址。以上是关于什么原因导致“Google Maps API 服务器拒绝了您的请求。发现此 API 项目的内部错误。”?的主要内容,如果未能解决你的问题,请参考以下文章