如何从自有网站正常访问Google My Map标记的托管图片?
问题背景
导入Google My Maps创建的自定义地图时,地图本身可正常使用,但标记点附带的图片无法访问,所有请求均返回403错误。这类图片的URL格式为:https://doc-xx-b8-mymaps.googleusercontent.com/untrusted/hostedimage/...
已尝试的无效方案
PHP下载图片自行托管:使用
file_get_contents和cURL尝试下载,均返回403错误。代码示例:$download = file_get_contents($image['src']); $temp = 'image'; file_put_contents($temp, $download); $file_data = getimagesize($temp); $image_data = $file_data['mime']; $image_type = explode('/', $image_data); $extension = $image_type[1]; $filename = uniqid().'.'.$extension; rename($temp, $filename);直接作为img标签src使用:将原URL设为img的
src属性,控制台显示403拦截;添加referrerpolicy="no-referrer"后仍无效。同时发现原URL会被自动重定向为:https://www.google.com/maps/d/refreshhostedimage?image=原图片URL
请求详情显示响应头包含严格的缓存控制、CSP策略,明确返回403 Forbidden。
核心原因
Google My Maps的托管图片受权限上下文保护,仅允许在Google Maps的官方页面环境中访问,外部直接请求或下载会被防盗链机制拦截,并非单纯的请求头缺失问题。
可行解决方案
手动导出图片本地托管
打开你的Google My Map,逐个保存标记点的图片到本地服务器,替换导入后的地图图片URL为本地地址。适合标记点数量较少的场景。使用Google Maps Embed API嵌入地图
若需保留地图交互性,直接通过Embed API嵌入整个地图,标记点图片会在Google合法上下文内加载,不会触发403。示例代码:<iframe width="600" height="450" style="border:0" loading="lazy" allowfullscreen referrerpolicy="no-referrer-when-downgrade" src="https://www.google.com/maps/embed/v1/view?key=你的API密钥¢er=纬度,经度&zoom=10&maptype=roadmap"> </iframe>需提前申请Google Maps API密钥,并启用Embed API权限。
检查地图共享权限
确认你的Google My Map已设置为公开共享(或共享给指定用户),私有地图的外部请求会被直接拦截。开放权限后,部分场景下图片可正常加载。
无效原因说明
untrusted/hostedimage路径下的资源会验证请求的来源上下文、会话Cookie等信息,单纯修改请求头或referrerpolicy无法绕过权限校验。refreshhostedimage是Google内部接口,外部调用缺少合法会话凭证,必然被拒绝。
内容的提问来源于stack exchange,提问作者Pawlisko

