我在iOS上使用SVGeocoder访问谷歌的地理编码服务,遇到了一个非常奇怪的问题。当在模拟器上或连接到wifi的手机上进行测试时,地理编码非常有效,但一旦手机切换到3G/4G,我就会出现"极限超出"错误。我只通过3G/4G提出了几十个请求,没有接近2500个请求的限制。这里可能发生了什么?
提前感谢!
UPDATE:我最终通过延迟每个地理编码请求之间的时间来解决这个问题。我知道发送请求过快可能是个问题,但直到我读到这篇文章,我才意识到它返回了相同的QUERY_LIMIT_EXCEEDED消息。
然而,这仍然不能回答为什么它在wifi上有效而在3G/4G上无效的问题。
它在Wifi中工作,因为您可以使用自己的IP地址和提供商。在蜂窝网络中,您可以通过提供商运行请求,提供商通常使用传出代理。因此,当谷歌收到请求时,它会看到所有客户的提供商代理的IP,而不是你自己的IP,这与wifi不同。
根据经验和数据包捕获,当我也遇到类似的问题时,至少我得出了这样的结论。
-
这意味着,从您的提供商运行的蜂窝网络执行的每个请求似乎都来自谷歌的同一IP,从而增加了对该给定IP的请求数量,至少从谷歌服务器的角度来看是这样。因此,如果你、你的邻居和其他数百万使用同一提供商的人都向谷歌发送请求,而该提供商使用相同的传出代理,谷歌可能会为这数百万人/请求看到相同的IP,并考虑达到配额限制。
-
如果你通过wifi网络运行请求,你将不会通过蜂窝网络提供商的传出代理,而是拥有自己的传出IP,并且在出现"LIMIT EXCEEDED"错误之前,你可以进行更多的请求,因为只计算你自己的请求。
我认为事实上这有点复杂:你的提供商可能有多个传出代理,并使用负载平衡来发送客户的请求,谷歌可能有一个数据库知道主要CN提供商的代理,并相应地调整其配额限制,等等…但你明白了