Python 爬虫反爬突破:Referer 防盗链彻底绕过

张开发
2026/5/9 1:40:38 15 分钟阅读

分享文章

Python 爬虫反爬突破:Referer 防盗链彻底绕过
前言在 Web 资源防护体系中Referer 防盗链是网站应用最广泛、部署成本最低的基础防护手段之一。网站通过校验 HTTP 请求头中的 Referer 字段判断请求来源页面地址拒绝非本站合法来源的爬虫直接请求出现资源加载失败、图片无法访问、接口返回空数据、403 禁止访问等问题。传统爬虫直接发起请求时默认不带 Referer 请求头或携带非法来源地址极易触发防盗链拦截即便简单伪造 Referer也常会因来源层级、域名匹配规则、跳转链路校验不严谨导致绕过失败。本文系统拆解 Referer 防盗链校验原理、主流校验规则、多层级来源校验逻辑结合全套实战代码、请求头构造规范、动态跳转链路模拟、全局请求头封装方案实现全场景 Referer 防盗链永久绕过适配图片资源、静态文件、Ajax 接口、视频流媒体等各类防盗链场景。本文涉及核心依赖库与官方资源超链接如下requests 网络请求核心库fake-useragent 随机 UA 生成工具selenium 浏览器自动化模拟真实访问链路requests-toolbelt 请求头与会话高级扩展工具urllib 内置网络请求与链接解析库lxml 网页解析提取真实来源地址库一、Referer 防盗链核心原理与字段规则1.1 Referer 请求头基础定义Referer 是 HTTP 标准请求头字段用于标识当前请求是从哪一个页面跳转过来记录访问来源 URL 地址。浏览器正常访问网页、点击链接、加载图片、触发 Ajax 请求时会自动携带合法 Referer 给到服务端。服务端 Nginx、Apache、后端网关均可配置防盗链规则读取请求头 Referer 进行域名匹配、白名单校验、空值拦截非法来源直接拒绝响应。1.2 Referer 防盗链三大核心校验模式1.2.1 空 Referer 拦截模式最简单的校验规则禁止请求不带 Referer 字段爬虫默认无 Referer 直接 403 拦截仅需伪造合法来源即可绕过。1.2.2 白名单域名校验模式服务端配置本站域名白名单仅允许 Referer 包含本站主域名、子域名的请求通过非白名单域名、空 Referer 全部拦截是中小型网站主流防护方式。1.2.3 多级链路来源校验模式高强度防盗链不仅校验域名还校验来源页面路径、访问跳转链路、上级页面层级必须先访问首页或列表页再请求接口与资源模拟真实用户浏览跳转链路才可绕过单纯伪造固定 Referer 无效。1.3 Referer 字段合法格式规范必须为完整 URL 格式包含http://或https://协议头域名必须与目标站点主域名一致或归属子域名路径层级需匹配业务访问逻辑不可随意填写陌生路径HTTPS 页面请求资源时禁止携带 HTTP 协议 Referer会被安全策略拦截。1.4 防盗链触发常见表现表格资源类型防盗链拦截现象图片资源返回裂图、占位图、403 空白图片静态 JS/CSS资源加载失败、页面样式错乱Ajax 接口状态码 200 无数据、返回权限不足视频流媒体播放地址失效、分段流请求被拦截下载资源直接跳转错误页、拒绝下载二、Referer 常见错误绕过方式与弊端2.1 不携带 Referer 直接请求原生 requests 爬虫默认不带 Referer 头部绝大多数网站直接拦截仅适用于无任何防盗链防护的简易站点通用性极差。2.2 固定写死单一 Referer手动写死固定首页地址作为 Referer仅能绕过基础域名校验遇到多级链路校验、动态来源校验的网站依旧会被拦截无法适配复杂场景。2.3 跨协议伪造 RefererHTTPS 目标接口填写 HTTP 协议来源地址浏览器安全规范会自动丢弃非法 Referer服务端安全策略也会直接拦截属于无效伪造。三、基础绕过手动构造合法 Referer 请求头3.1 适配白名单域名校验实战代码针对普通域名白名单防盗链直接构造本站首页作为 Referer搭配标准浏览器请求头即可完美绕过拦截。python运行import requests from fake_useragent import UserAgent # 生成随机UA ua UserAgent() # 目标接口与合法来源地址 target_api https://target.com/api/data referer_url https://target.com/ # 构造完整合法请求头 headers { User-Agent: ua.random, Referer: referer_url, Accept: application/json,text/javascript,*/*;q0.9, Accept-Language: zh-CN,zh;q0.9, Sec-Fetch-Mode: cors, Sec-Fetch-Site: same-origin } # 发起带Referer请求 resp requests.get(target_api, headersheaders, timeout10) print(响应状态码, resp.status_code) print(响应数据, resp.text[:300])3.2 代码原理详解同源 Referer 构造使用目标网站首页作为来源地址匹配服务端域名白名单规则完整浏览器头模拟补充 Sec-Fetch 系列同源标识头完全复刻浏览器跨域请求特征随机 UA 搭配避免固定请求头特征被风控标记提升绕过稳定性适配基础防盗链可直接绕过空 Referer 拦截、单域名白名单校验两类场景。四、进阶绕过动态抓取真实页面 Referer4.1 适用场景网站限制仅列表页、详情页可请求接口资源直接用首页作为 Referer 会被拦截需要先访问真实页面提取真实合法的来源地址再发起接口请求。4.2 动态获取真实 Referer 实战代码python运行import requests from lxml import etree from fake_useragent import UserAgent ua UserAgent() session requests.Session() # 请求头基础配置 base_headers { User-Agent: ua.random, Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8 } # 第一步先访问列表页获取真实来源页面 list_page_url https://target.com/list resp_list session.get(list_page_url, headersbase_headers, timeout10) # 第二步将列表页作为合法Referer请求接口 api_headers { User-Agent: ua.random, Referer: list_page_url, Accept: application/json } api_url https://target.com/api/detail resp_api session.get(api_url, headersapi_headers, timeout10) print(接口响应状态码, resp_api.status_code) print(接口返回数据, resp_api.text[:200])4.3 代码原理详解会话保持链路使用 Session 维持会话上下文模拟用户先逛列表页再请求接口的真实行为动态来源复用以真实访问的业务页面作为 Referer匹配多级链路校验规则分步模拟浏览行为完全复刻自然人访问路径绕过高强度来源层级校验天然协议匹配自动保持 HTTP/HTTPS 协议一致避免跨协议 Referer 被丢弃。五、高阶绕过自动适配全局 Referer 会话封装5.1 全局自动 Referer 原理手动逐个设置 Referer 效率低下可封装全局 Session 会话自动记录上一次请求的 URL作为下一次请求的 Referer全程自动适配跳转链路无需手动配置永久适配所有防盗链场景。5.2 全局自动 Referer 封装实战代码python运行import requests from fake_useragent import UserAgent class AutoRefererSpider: def __init__(self): self.session requests.Session() self.ua UserAgent() # 记录上一次访问地址作为下一次Referer self.last_referer def get(self, url, **kwargs): # 自动构造请求头携带上一次的Referer headers { User-Agent: self.ua.random, Referer: self.last_referer, Accept: */* } # 合并自定义请求头 if headers in kwargs: headers.update(kwargs[headers]) # 发起请求 resp self.session.get(url, headersheaders, timeout10, **kwargs) # 更新Referer为当前访问URL self.last_referer url return resp if __name__ __main__: spider AutoRefererSpider() # 第一步访问首页 spider.get(https://target.com/) # 第二步自动携带首页作为Referer访问列表页 spider.get(https://target.com/list) # 第三步自动携带列表页作为Referer请求接口 res spider.get(https://target.com/api/data) print(最终接口响应, res.status_code)5.3 代码原理详解自动链路追溯内部维护last_referer变量自动把上一跳 URL 作为当前请求来源会话上下文联动依托 Session 保持 Cookie 与访问状态形成完整真实浏览链路无感知自动适配无需人工填写 Referer任意多页面跳转自动适配防盗链规则工程化封装可直接集成到爬虫项目全局永久解决 Referer 防盗链问题。六、浏览器自动化无感知绕过 Referer 防盗链6.1 浏览器天然绕过优势Selenium、Playwright 等浏览器自动化框架真实模拟人类点击跳转浏览器内核会自动生成合法 Referer无需手动构造任何请求头天然绕过所有层级的 Referer 防盗链适配最强校验场景。6.2 Selenium 天然绕过实战代码python运行from selenium import webdriver from selenium.webdriver.chrome.options import Options import time chrome_options Options() chrome_options.add_argument(--disable-blink-featuresAutomationControlled) chrome_options.add_experimental_option(excludeSwitches, [enable-automation]) driver webdriver.Chrome(optionschrome_options) # 真实页面跳转浏览器自动携带合法Referer driver.get(https://target.com/) time.sleep(2) # 点击跳转列表页自动生成正确Referer driver.get(https://target.com/list) time.sleep(3) # 请求资源与接口全程由浏览器自动维护Referer无需手动伪造 print(当前页面地址, driver.current_url)6.3 代码原理详解内核原生支持Chrome 浏览器内核自动按照标准规则生成 Referer完全符合网站校验逻辑真实浏览链路页面跳转、资源加载、接口请求全部由浏览器原生驱动无任何伪造痕迹适配超高强度防盗链可绕过域名校验、层级链路校验、协议安全校验所有规则零配置绕过无需关注 Referer 格式、来源路径开箱即用彻底规避防盗链拦截。七、图片 / 视频资源专用 Referer 绕过方案7.1 静态资源防盗链特点图片、视频、CSS、JS 静态资源防盗链校验更严格常限制仅允许站内页面嵌入加载直接访问资源地址会立刻 403。7.2 静态资源下载实战代码python运行import requests from fake_useragent import UserAgent ua UserAgent() # 资源地址与所属页面来源 resource_url https://target.com/images/123.jpg page_referer https://target.com/detail/123 headers { User-Agent: ua.random, Referer: page_referer } # 下载带防盗链的图片 resp requests.get(resource_url, headersheaders, timeout15) # 保存到本地 with open(image.jpg, wb) as f: f.write(resp.content) print(防盗链图片下载完成)7.3 核心要点静态资源必须使用承载页面地址作为 Referer不可用首页替代二进制资源请求无需多余 JSON 头保留基础浏览器标识即可大文件视频流需配置超时时间配合流式下载避免连接中断。八、Referer 防盗链绕过方案选型对照表表格网站防护等级推荐绕过方案适用场景优势基础空 Referer 拦截手动构造首页 Referer普通接口、简易静态资源代码简单、轻量无依赖域名白名单校验固定业务页 Referer 伪造中小型资讯、企业官网快速落地、稳定性强多级链路校验Session 动态抓取真实来源电商、榜单、动态接口模拟真实浏览路径全场景通用全局自动 Referer 封装工程化爬虫、多页面采集全自动无需手动配置超高强度防盗链Selenium/Playwright 浏览器模拟视频流媒体、高强度资源站原生内核无感知绕过九、Referer 绕过避坑核心要点禁止跨协议伪造 RefererHTTPS 站点必须使用 HTTPS 来源地址Referer 不能为空字符串部分服务器严格校验非空字段路径层级必须匹配业务逻辑越级填写来源地址会被高级链路校验拦截长期爬虫务必使用 Session 会话保持维持完整访问链路避免风控关联不要固定单一 Referer 地址需随页面跳转动态变更贴合真实用户行为。

更多文章