词汇表

什么是User Agent?

User-Agent是一个HTTP请求头,用于标识发出请求的客户端软件——通常包括浏览器名称、版本、操作系统和渲染引擎——例如'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'。

了解User-Agent字符串、它为何是网站识别爬虫最简单的信号,以及如何在轮换IP的同时轮换User-Agent而不破坏指纹一致性。

详解

User-Agent 请求头是网络上最古老的身份标识之一。客户端发送的每个 HTTP 请求都包含一行 `User-Agent:`,用于标明客户端软件(浏览器或库)、版本号、操作系统,以及通常还有渲染引擎。服务器利用它进行内容协商(移动端与桌面端布局)、数据分析,以及日益普遍的机器人检测。

在爬虫场景中,User-Agent 是最容易出错的信号。常见 HTTP 库的默认 User-Agent(如 `python-requests/2.31.0`、`axios/1.5.0`、`okhttp/4.10.0`)会立即暴露身份。即便是 Playwright 和 Puppeteer 的默认 User-Agent 也包含 `HeadlessChrome`,反机器人系统会对此立即标记。

最简单的应对方法是在每个请求中设置 Chrome 的 UA。但问题在于,仅靠 User-Agent 是不够的——现代指纹识别技术会将 UA 与 `sec-ch-ua` 客户端提示、TLS 指纹、JavaScript navigator 对象以及 Accept-Language 请求头进行交叉比对。设置了 Chrome UA 却暴露了 Python 的 TLS 握手特征,反而会比直接保留默认 UA 产生更大的风险。

工作原理

当您的客户端与服务器建立连接时,请求行中包含请求头。`User-Agent` 行就是其中之一。服务器会解析它(或仅记录它),并根据所见内容对请求进行路由。Windows 上现代 Chrome 的 User-Agent 如下所示:`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36`。'Mozilla/5.0' 前缀具有历史渊源,每个浏览器都会发送它,以兼容旧版系统。

现代 HTTP 中,真实浏览器还会发送 `sec-ch-ua`('Sec-CH-UA' 客户端提示)请求头,其中携带结构化的浏览器、版本及平台数据。反爬虫系统会将这些数据与 User-Agent 字符串进行比对,并标记其中的不一致之处。因此,User-Agent 轮换必须与一致的 `sec-ch-ua-*` 更新以及匹配的 TLS 指纹配合使用。

类型

桌面浏览器User-Agent

Windows/macOS/Linux上的Chrome、Firefox、Edge、Safari。是爬取通用网络目标最常见的UA系列。

移动浏览器User-Agent

Android上的Chrome、iOS上的Safari、Samsung Internet。在爬取移动端定向网站或与移动代理配合以保持指纹一致性时必须使用。

机器人/爬虫User-Agent

可识别的UA,如`Googlebot/2.1`、`bingbot/2.0`。由合法搜索引擎爬虫使用,部分网站会将其列入白名单。伪造这些UA存在法律和服务条款风险。

库默认User-Agent

`python-requests/X.Y`、`curl/X.Y`、`Mozilla/5.0 (compatible; Java/X.Y)`。HTTP库的默认UA——切勿在生产爬虫中使用,它们极易被识别。

常见使用场景

识别客户端浏览器和操作系统以进行内容协商
服务器端数据分析和访客细分
机器人检测(库默认UA是明显的暴露标志)
移动端与桌面端布局选择
按浏览器系列进行缓存
爬虫中的User-Agent轮换,以模拟真实用户的多样性
常见问题

常见问题

关于以下内容的常见问题 用户代理.

使用与近几个月内发布的真实浏览器版本相匹配的最新主流User-Agent。Windows或macOS上的Chrome是安全的默认选择。在一小组最新UA中轮换,而不是对所有请求使用同一个固定UA。