很多网站不止看IP,还看HTTP请求头——User-Agent、Referer、Accept-Language这些字段组合在一起,暴露了你的浏览器特征和访问来源。只换代理IP不改请求头,等于换了个面具但穿着同一套衣服。本文讲清几个关键请求头的伪装方法。
网站通过请求头能看到什么
你每次访问网页,浏览器会自动发送这些请求头给服务器:
- User-Agent:你的浏览器类型、版本、操作系统。”Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0″
- Referer:你从哪个页面跳转过来的。直接输入网址访问的话这个字段是空的。
- Accept-Language:浏览器语言。zh-CN说明是中文用户。
- X-Forwarded-For:代理服务器有时会加这个头,暴露客户端的真实IP。
代理IP只改了TCP层的源地址,HTTP层的请求头不会自动变——你通过代理访问的网站看到的是你本地浏览器发出的原始请求头。如果你的User-Agent是中文Windows+Chrome、Accept-Language是zh-CN,但代理IP是美国——这种矛盾会被风控系统标记。
改User-Agent
浏览器端:Chrome开发者工具F12→右上角三个点→”More tools”→”Network conditions”→取消勾选”Use browser default”→手动输入一个美国常用的UA。
Python requests端:直接设headers参数。
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
'Accept-Language': 'en-US,en;q=0.9',
'Accept': 'text/html,application/xhtml+xml',
'Referer': 'https://www.google.com/',
}
resp = requests.get('https://目标网站',
proxies={'http': 'http://代理IP:端口', 'https': 'http://代理IP:端口'},
headers=headers)Selenium端:启动参数里加UA。
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--user-agent=UA字符串')天行IP的代理节点配合自定义请求头,能有效降低被网站识别为”异常流量”的概率。邀请码 blsj,静态代理月付6元起。
随机化UA轮换
单用一个UA等于穿了换衣服但每次同一件。维护一个UA列表随机取:
import random
ua_list = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/126.0.0.0',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/125.0.0.0',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/124.0.0.0',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0',
]
headers = {'User-Agent': random.choice(ua_list)}注意:只用真实的、市面上常见的浏览器版本UA。别用自己编的奇怪字符串——反而更容易被识别为爬虫。Chrome和Firefox的UA格式是固定的,在WhatIsMyBrowser.com可以查到主流版本。
改Referer伪装来源
Referer告诉你”怎么到这一页的”——如果Referer是空的或者指着一个不相关的网站,风控会怀疑。伪装Referer为搜索引擎:
headers['Referer'] = 'https://www.google.com/search?q=' + '关键词'或者伪装成从站内其他页面跳转过来的:headers[‘Referer’] = ‘https://目标网站/上一个页面的URL’——模拟正常的站内浏览路径。
检查还有哪些头暴露了你
用 httpbin.org/headers 或者 requestbin.com 可以抓到你实际发出的所有请求头。对着检查:X-Forwarded-For有没有暴露真实IP;Accept-Language和代理IP地区是否匹配;Referer是否符合正常浏览逻辑;有没有代理客户端自己加的标识头。
常见问题
改了UA和Referer还是被网站识别为爬虫?
因为网站还有别的检测维度——浏览器指纹(Canvas/WebGL/AudioContext)、TLS指纹(JA3)、行为分析(鼠标移动轨迹、滚动速度)。请求头伪装只是基础,全面防检测需要参考第31篇浏览器指纹对抗(ID 13573)。
每次请求都随机UA会不会太假了?
同一个Session(同一个IP)短时间内切换多个不同的UA会被风控识别——正常用户不会几秒钟换一次浏览器版本。建议同一个IP绑定一个UA,换IP时才换UA。两者同步切换更自然。
用Selenium改了UA但网站还是能看到真实UA?
Selenium的–user-agent参数在旧版本有bug——某些情况下不生效。改完后driver.execute_script(“return navigator.userAgent”)确认返回的是你设置的UA。如果不一致,用undetected-chromedriver替代。






