代理IP的HTTP请求头怎么改?User-Agent和Referer伪装实战

Python requests和Selenium里自定义UA、Referer伪装和请求头随机化轮换
发布于
1

很多网站不止看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替代。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600

HTTP代理和SOCKS5代理都能改IP,但它们在数据包里做的事完全不同。用Wireshark抓个包对比一下,你会发现HTTP代理能看到你访问的网页内容(理论上),SOCKS5只是一个透明管道什么都不看。这个区别决定了不同场景下该用哪个。

第一次接触代理IP,看到一堆术语——SOCKS5、HTTP代理、住宅IP、静态IP——不知所云。本文用最直白的语言把代理IP是什么、怎么选类型、到手怎么配置、配置完怎么验证说清楚。零基础也能看懂。 代理IP到底是什么 你在网上做的每一件事—

你配了代理IP、打开检测网站一看,显示的IP还是你家宽带的地址——不是代理节点的IP。这种情况叫IP泄漏,意思是虽然你走了代理通道,但某些网络请求没走代理、直接从你的真实网络出去了。本文把八个常见的泄漏点找出来,一个一个排查。 泄漏一:We