Instagram帖子图片获取链接匿名访问404问题求助
解决Instagram匿名访问帖子图片404问题
问题根源
Instagram的反爬机制会校验sec-fetch-site请求头:当该字段为cross-site时,会判定为跨域脚本请求并拦截返回404;而手动在地址栏输入URL回车时,浏览器会自动将该头设为none(表示请求来自地址栏,无跨域上下文),Insomnia/Postman等工具默认不携带跨域相关头,因此能正常访问。
解决办法
强制设置
sec-fetch-site请求头为none
在Axios请求中手动添加该头,覆盖默认的跨域值,同时补充浏览器常规请求头以模拟正常访问:axios.get('https://www.instagram.com/p/Cr7Ub8ULkzV/media/?size=l', { headers: { 'sec-fetch-site': 'none', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8', 'accept-language': 'zh-CN,zh;q=0.9' }, withCredentials: false })模拟地址栏请求上下文
如果前端直接发起请求仍被拦截,可尝试:- 通过后端代理请求:后端发起HTTP请求时不受浏览器跨域头限制,不会自动添加
cross-site标识 - 前端模拟地址栏跳转:创建
<a>标签设置图片地址并触发点击,或使用window.open()打开图片链接,这种方式会自动触发浏览器的地址栏请求逻辑,sec-fetch-site会被设为none
- 通过后端代理请求:后端发起HTTP请求时不受浏览器跨域头限制,不会自动添加
补充完整跨域相关请求头
对比浏览器手动访问的请求头,补充sec-fetch-mode、sec-fetch-dest等字段,进一步降低被拦截概率:headers: { 'sec-fetch-site': 'none', 'sec-fetch-mode': 'navigate', 'sec-fetch-dest': 'image', // 其他常规头... }
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

