Google Maps Geocoding API域名限制后报403错误(Python脚本调用异常)
解决Google Maps API密钥限制后服务器端地理编码请求403的问题
我之前也碰到过几乎一模一样的情况,核心问题其实是HTTP引用(Referer)限制只对浏览器发起的请求生效,而你的Python脚本是在服务器后台运行的,调用Geocoding API时不会带上符合你设置的Referer头(甚至可能根本没有这个头),所以被Google的安全策略拦截,返回了403错误。
具体原因拆解
- 你设置的
https://website.com/*和https://www.website.com/*这类HTTP引用限制,是专门约束浏览器端前端代码的——浏览器在发起请求时会自动带上当前页面的Referer,匹配上规则就允许访问,所以你的JavaScript地图和自动完成功能能正常工作。 - 但Python脚本是在服务器后台运行的,它发起的Geocoding API请求不会有浏览器那样的Referer头,自然匹配不上你设置的规则,直接被拒绝了。
可行的解决方案
1. 为API密钥添加IP地址限制(推荐)
因为你的Python脚本是在自己的服务器上运行的,服务器有固定的公网IP地址。你可以:
- 登录Google Cloud控制台,找到你的API密钥设置页面
- 在「应用限制」里,把原来的「HTTP引用(网站)」切换成(或者补充)「IP地址(服务器端)」
- 添加你的服务器公网IP地址(如果是云服务器,比如AWS、阿里云,直接找实例的公网IP即可)
- 保存设置后,服务器端的Python脚本请求就能正常通过了
2. 拆分密钥策略(更安全)
如果你不想修改现有密钥的限制,也可以:
- 专门为服务器端的地理编码请求创建一个新的API密钥,只给这个密钥设置IP限制,专门用于服务器端调用
- 保留原来的密钥给前端使用,这样前端和服务器端的请求互不影响,安全性也更高
额外注意事项
- 检查你设置的HTTP引用格式:正确的格式应该是
https://website.com/*(不带空格),虽然你说前端功能正常,但这个细节还是要确认下 - 确保你的Python脚本调用Geocoding API时,没有错误地带上了不符合规则的Referer头(如果有的话,去掉它即可)
内容的提问来源于stack exchange,提问作者Luke D
相关产品推荐
相关产品推荐

