如何设置用户代理
Scrapeless Agent Browser 提供用于网页自动化的云端浏览器,并支持可配置的浏览器指纹。
通过在 HTTP 客户端中配置 User-Agent 请求头,或在浏览器环境中通过受支持的浏览器身份设置来设置用户代理。然后验证服务器接收到的值。代码中可见的配置值不足以证明预期的请求头已到达目标服务器。
User-Agent 字段描述了发出请求的软件。它可以帮助服务识别客户端或选择响应表示形式,但它既不能对客户端进行身份验证,也不能完整复现整个浏览器。因此,一个有用的配置既需要有意设置的取值,也需要对该更改可能产生的影响有清晰的理解。
摘要
- 通过客户端支持的 header 接口设置 User-Agent。 请保持数值明确且与应用场景相适应。
- 在接收服务器上验证报头。 本地配置和连线行为可能有所不同。
- 标头的更改不会改变浏览器引擎。 渲染、TLS 和设备能力仍然是彼此独立的。
- It looks like you haven’t provided the English text to translate yet. Please paste the content you want translated to Chinese, and I’ll return the translated version following your rules. 每次请求使用随机值会让观测结果更难以解释。
User-Agent 字符串是什么意思?
User-Agent 字符串是在 HTTP 请求字段中携带的客户端软件的自我声明描述。 HTTP User-Agent 字段定义 描述产品标识符和可选注释。服务器可以使用该值进行兼容性处理、分析或诊断。
浏览器字符串通常包含具有历史兼容性的标记。在字符串中找到熟悉的产品名称并不能证明对应的引擎正在运行。客户端可以选择不同的字符串,而且多个浏览器可以共享同一语法的部分内容。
The User-Agent 标头模型 也反映了浏览器在减少详细身份信息方面所做的努力。避免设计那种依赖于所有次要操作系统或浏览器版本无限期以相同格式暴露的收集器。
对于可识别的内部检查器来说,一个简洁的应用名称和版本比复制冗长的浏览器字符串更有用。请使用与被允许任务相匹配的身份。不要声称自己是搜索引擎爬虫或其他组织的应用程序,以获取与该身份相关的访问权限。
在运行示例之前
下面的示例需要使用 curl 或安装了 Requests 包的 Python,并且能够访问公共的 HTTP 头回显端点。它们发送一个单一的 GET 请求,并打印该端点所观测到的值。它们不需要 Scrapeless 账号、代理或浏览器会话。
CatalogAudit/1.0 是为本演示选择的示例性应用程序标识。请将其替换为适用于你自己应用程序的标识。期望的值是你有意发送的值,而不是对任何浏览器版本的说明。
回显服务是一个诊断用的目标地址。不要向它发送认证头、Cookies 或私有 URL。示例中只提交演示用的 user-agent 头部,从而使检查专注于所教授的行为。
在 curl 中设置 User Agent
curl 通过 --user-agent 选项(也可以写作 -A)来设置 User-Agent 字段。 curl 命令行选项 将该设置与代理配置和其他请求头分开单独定义。
运行此单个请求以检查 echo 端点接收到的值:
curl --silent --show-error --fail --max-time 20 \
--user-agent 'CatalogAudit/1.0' \
'https://httpbin.org/user-agent'
该响应包含一个 user-agent 字段,其值为 curl 发送的值。显式的时间限制约束了命令的传输生命周期,而 --fail 使 HTTP 错误响应以命令失败的形式可见。这只是一个小型的报头检查,而不是对完整采集流水线的测试。
当你使用较长的身份标识时,请给字符串加上引号,以便空格或标点符号在作为一个 shell 参数时保持整体。请不要在字符串中包含凭据。User-Agent 是描述性的请求元数据,可能会出现在服务器日志中。
在 Python Requests 中设置 User Agent
Python Requests 通过其 headers 参数接受自定义请求头。在请求上显式设置该字段,并在将同样的设置应用到更大的工作流之前,先检查接收端点的响应。
这个完整的示例发出一个请求,并验证回显的值与配置的值匹配:
import requests
user_agent = "CatalogAudit/1.0"
response = requests.get(
"https://httpbin.org/user-agent",
headers={"User-Agent": user_agent},
timeout=20,
)
response.raise_for_status()
received = response.json()["user-agent"]
assert received == user_agent
print(received)
请求的超时限制了根据客户端超时行为进行的网络等待;这并不是声称所有可能的外围业务操作都会在该时间段内完成。该断言检查的是此示例要讲解的特定行为:端点收到了所选的标头值。
对于相关请求,请求会话可以保存共享的请求头和 Cookie。需要判断某个请求头是属于整个会话,还是只属于单个请求。请求级别的覆盖对于受控对比很有用,但会话内部的意外更改可能会削弱对结果的解读。
验证实际发出的请求
验证应将已配置的值与服务器观测结果或对发出的请求的可靠捕获进行比较。仅检查脚本中的变量无法检测到后续的覆盖、构造另一请求的封装器或更改报文头的中间层。
在浏览器中,网络面板可以显示单个请求的请求头。请选择正在调查的实际文档或 API 请求,因为一次页面加载可能涉及许多独立的请求。某个资源上显示的值并不能说明页面中每个请求都使用了相同的值。
要记住重定向的情况。原始 URL 可能会指向另一个目标,并且客户端设置在这条重定向链中可能会有不同的应用方式。记录最终的 URL,并检查生成你正在评估内容的那个请求。首个请求上的正确请求头并不能证明最终的表现形式符合你预期的测试。
如果回显结果与配置的值不同,请缩小排查范围。检查客户端配置和任何由环境提供的代理设置。比较简单请求与应用程序封装后的请求。一次只更改一个因素,以便观察结果能指向真正的原因。
为什么更改 User-Agent 并不能仿真设备
更改 User-Agent 只是改变声明的身份,而设备仿真可能还涉及视口、输入能力、浏览器 API 和渲染行为。一个桌面端网络库即使发送看起来像移动设备的字符串,也不会获得移动浏览器的执行环境。
“ 用户代理检测的局限性 ”说明了为什么特性检测在 Web 应用行为方面通常更可靠。站点可以检测实际能力,而不是信任请求头中的产品标识。
对于移动布局测试,不仅要定义声明的身份,还要定义所需的视口和交互条件。对于内容协商测试,应关注请求头和返回的表现形式。这是两种不同的测试,不应简单归结为“这个请求来自真实手机”的单一结论。
TLS 行为同样是分离的。一个 Python HTTP 客户端不会仅仅因为声明了浏览器的名称,就采用该浏览器的传输实现。如果兼容性依赖于网络栈或页面执行,请直接检查这层,而不要反复更换无关的请求头字符串。
客户端提示如何影响身份检查
在支持该机制的浏览器中,User-Agent Client Hints 提供了额外的结构化身份信息。站点可以将这些提示与 User-Agent 字符串结合使用。只更改某一个字段,可能会让整体声明的环境变得不一致。
浏览器工具和自动化框架在其身份控制会更新哪些值方面并不相同。请使用实际浏览器的文档化配置界面,并在相关情况下同时检查网络层和页面可见属性。不要假定仅通过覆盖请求头就能同步更新所有 JavaScript 属性。
保持测试范围明确。如果需求只是验证一个 HTTP 请求头,那么回显示例就足够了。如果需求是验证浏览器身份配置,请分别检查浏览器环境和目标站点的行为,作为独立的证据。
在浏览器层面开展工作的 Agent Browser 用法
Scrapeless Agent Browser 适用于任务需要云端浏览器而不仅仅是一次 HTTP 传输的场景。它的 自定义指纹配置 包括 User-Agent 以及其他受支持的身份设置,并在文档中列出了相关限制。
这些设置并不意味着可以不受限制地控制每一种设备特性。文档中说明的功能不会把云端会话变成任意的物理硬件。请将受支持的配置与兼容性或采集任务对应起来,并检查与该任务相关的属性。
相关的 Python Requests 用户代理使用指南 讲解了这一区别在 HTTP 客户端侧的体现。评估基于浏览器的工作时,请使用 Scrapeless pricing ,因为浏览器会话的运行模式不同于简单的本地请求头检查。
本文中的示例验证的是本地 curl 和 Requests 的请求头配置。它们没有演示已认证的 Agent Browser 会话,也不能证明某个特定目标站点会如何响应自定义的浏览器身份。
保持会话身份稳定并让结果易于解读
当一系列请求属于同一会话时,稳定的身份配置能让这一过程更易于解读。在相关操作之间随意更换用户代理,可能会改变服务器端的内容选择,却无法代表测试希望模拟的用户旅程。
对于一个假设性的兼容性对比测试,为两个预期的客户端配置分别定义独立会话。保持请求资源和其他条件受控,然后比较实际的表现形式。记录布局或字段的差异,而不是想当然地认为更改请求头必然会改变响应。
如果服务器返回访问限制,请尊重该边界。User-Agent 设置是一种兼容性与身份识别控制,而不是授权机制。请使用该服务支持的访问路径来完成任务。
结论
通过受支持的客户端选项设置 User-Agent,并在接收端进行验证。将该请求头的作用与 TLS 行为、浏览器渲染和设备能力区分开来。对于浏览器层面的任务,请使用文档化的浏览器配置,并直接测试由此产生的环境。
配置浏览器层面的工作流
当任务需要页面执行以及超出单个请求头的受支持浏览器身份设置时,请使用 Agent Browser。
立即注册即可获得 $5 in free credit — 无需信用卡.
领取你的 $5 额度 →常见问题解答
设置 User-Agent 是否需要代理?
设置 User-Agent 并不需要代理。HTTP 客户端可以直接配置该请求头;代理控制的是网络路径中的另一部分。
User-Agent 字符串能让 Requests 执行 JavaScript 吗?
User-Agent 字符串不能让 Requests 执行 JavaScript。无论声明的软件身份是什么,Requests 始终只是一个 HTTP 客户端。
如何确认设置已生效?
通过检查受控端点接收到的值或实际发出的请求来确认设置是否生效。示例使用了一个回显端点,并将其响应与配置的值进行比较。
用户代理是否应该在每次请求时都改变?
除非有特定任务需求,否则用户代理不应在每次请求时都改变。相关请求通常需要一致的身份,而受控对比应使用清晰区分的配置档。
为什么服务器仍然可以识别出是不同的客户端?
服务器可以观察到其他信号,包括 TLS 行为、客户端提示、cookies 和浏览器能力。User-Agent 只是一个声明字段,并不能决定所有可观测属性。
这是否需要一个 AI 代理?
curl 和 Python 示例无需 AI 代理即可运行。它们是普通的客户端请求,可直接用于验证请求头配置。