您现在的位置是:焦点 >>正文

如何给图片加referer 信息

焦点742人已围观

简介爬虫抓图被 403 挡了,十有八九是 referer 的问题。我上周写了个小脚本批量下载某壁纸站的图片,直连 URL 返回的全是 403 页面,加上 referer 头之后立刻正常。这不是什么高深技术 ...

爬虫抓图被 403 挡了,图片十有八九是信息 referer 的问题。我上周写了个小脚本批量下载某壁纸站的图片图片,直连 URL 返回的信息全是 403 页面,加上 referer 头之后立刻正常。图片这不是信息什么高深技术,但不知道的图片人能卡一整天。

referer 是信息 HTTP 请求头里的一个字段,告诉服务器"我是图片从哪个页面跳过来的"。服务器拿它做防盗链判断:你从我的信息网站点图片,referer 是图片我的域名,放行;你从别人网站或者直接敲 URL 访问,信息referer 为空或者不对,图片拒绝。信息就这么简单。图片

浏览器里怎么改

Chrome 装个 ModHeader 扩展,添加一个请求头,名称填 Referer,值填目标网站的首页地址。刷新页面,图片就出来了。Firefox 可以用 Referer Control 或者直接改 about:config 里的 network.http.sendRefererHeader 参数。不过浏览器改 referer 有个坑:某些网站会同时校验 referer 和 cookie,光改 referer 不够用。

用 curl 和 wget 加

命令行下最直接。curl 加一个 -e 参数就行:

curl -e "https://www.example.com/" -O "https://cdn.example.com/photo.jpg"

wget 用 --referer:

wget --referer="https://www.example.com/" "https://cdn.example.com/photo.jpg"

我平时调试阶段用 curl 最多,因为能看到完整的响应头,确认服务器到底检查了哪些字段。有一次遇到个站,referer 对了还是 403,加上 -v 一看,原来它还在校验 User-Agent 和 Accept,补上就通了。

Python 脚本里怎么设

用 requests 库的话,构造一个 headers 字典传进去:

import requests headers = {  "Referer": "https://www.example.com/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" } resp = requests.get("https://cdn.example.com/photo.jpg", headers=headers) with open("photo.jpg", "wb") as f: f.write(resp.content)

关键点:Referer 的拼写是历史遗留错误,正确的英文应该是 Referrer,但 HTTP 标准里就写成了 Referer,少一个 r。写代码的时候别自作聪明改过来,服务器只认标准里的拼法。

几个容易踩的坑

referer 的值必须是完整 URL,带协议头。www.example.com 和 https://www.example.com/ 在服务器眼里可能不一样。有些防盗链逻辑做的是前缀匹配,只要 referer 以自己域名开头就放行,这种最好绕过。还有的做的是包含匹配,更宽松。

HTTPS 页面请求 HTTP 资源时,浏览器默认不发送 referer。反过来 HTTP 页面请求 HTTPS 资源,referer 会正常带上。这个规则是浏览器层面的,脚本里不受影响。

另外提一句,Referrer-Policy 响应头可以控制浏览器发不发 referer、发多少。值设成 no-referrer 就完全不发,设成 origin 只发域名部分。你做防盗链的时候可以配合这个头来用,但别指望它挡得住脚本——脚本根本不理会这个策略,想发什么就发什么。

说到底,referer 校验只能防君子不防小人。对普通用户来说够用,对会写几行代码的人来说就是一层纸。真正要保护图片资源,还是得靠签名 URL、token 鉴权那套东西。

Tags:

相关文章

  • 滴滴危机公关案例分析

    焦点

    2018年8月24日,温州乐清20岁女孩赵某搭乘滴滴顺风车遇害。凶手是司机钟元,此前因猥亵被投诉,但滴滴平台未予处理。这起事件把滴滴推上舆论风口,比三个月前的空姐遇害案更猛烈——因为这次,人们发现滴滴 ...

    【焦点】

    阅读更多
  • 软件测试工程师证书

    焦点

    去年秋天,我在一家互联网公司的招聘现场,看到两个候选人简历上都有“软件测试工程师高级)”证书。面试官只翻了翻,就把其中一份放到了一边。那份被搁置的简历,持证人毕业自某培训机构,三个月拿证,项目经历写的 ...

    【焦点】

    阅读更多
  • labview绕过加密访问excel

    焦点

    LabVIEW 读 Excel 最烦人的地方在于:微软那套 Excel COM 组件本身不提供任何密码绕过机制。你调用 Open 方法时,如果文件带了打开密码,LabVIEW 会直接抛出错误 3001 ...

    【焦点】

    阅读更多


友情链接