
精确模拟主流浏览器网络行为的curl增强版
curl-impersonate是curl的增强版本,能精确模仿Chrome、Edge、Safari和Firefox的TLS及HTTP握手过程。它既可作为命令行工具使用,也可作为库集成到其他项目中。通过修改TLS配置和HTTP/2设置,curl-impersonate使网络请求与真实浏览器表现一致,有效避开基于TLS和HTTP/2指纹的检测。该工具为开发者提供了一种绕过网站反爬虫机制的有效方法。

这是curl的一个特殊版本,能够模仿四大主流浏览器:Chrome、Edge、Safari和Firefox。curl-impersonate能够执行与真实浏览器完全相同的TLS和HTTP握手。
curl-impersonate可以作为命令行工具使用,类似于常规的curl,也可以作为一个库集成使用,替代常规的libcurl。详见下方使用方法。
当你使用HTTP客户端访问TLS网站时,它首先会进行TLS握手。该握手的第一条消息称为Client Hello。大多数HTTP客户端和库产生的Client Hello消息与真实浏览器的差异很大。
如果服务器使用HTTP/2,除了TLS握手外,还会进行HTTP/2握手,交换各种设置。大多数HTTP客户端和库使用的设置也与任何真实浏览器的设置不同。
因此,一些网络服务使用TLS和HTTP握手来识别访问它们的客户端,然后为不同的客户端呈现不同的内容。这些方法分 别被称为TLS指纹识别和HTTP/2指纹识别。它们的广泛使用导致网络变得不那么开放、不那么私密,对特定的网络客户端也变得更加限制。
使用本仓库中修改后的curl,TLS和HTTP握手看起来完全像真实浏览器。
为了实现这一目标,对curl进行了大量修改以模仿浏览器。具体来说,需要进行以下修改:
--ciphers、--curves和一些-H头。从网络角度来看,修改后的curl与真实浏览器完全相同。
以下浏览器可以被模拟:
| 浏览器 | 版本 | 构建 | 操作系统 | 目标名称 | 包装脚本 |
|---|---|---|---|---|---|
![]() | 99 | 99.0.4844.51 | Windows 10 | chrome99 | curl_chrome99 |
![]() | 100 | 100.0.4896.75 | Windows 10 | chrome100 | curl_chrome100 |
![]() | 101 | 101.0.4951.67 | Windows 10 | chrome101 | curl_chrome101 |
![]() | 104 | 104.0.5112.81 | Windows 10 | chrome104 | curl_chrome104 |
![]() | 107 | 107.0.5304.107 | Windows 10 | chrome107 | curl_chrome107 |
![]() | 110 | 110.0.5481.177 | Windows 10 | chrome110 | curl_chrome110 |
![]() | 116 | 116.0.5845.180 | Windows 10 | chrome116 | curl_chrome116 |
![]() | 99 | 99.0.4844.73 | Android 12 | chrome99_android | curl_chrome99_android |
![]() | 99 | 99.0.1150.30 | Windows 10 | edge99 | curl_edge99 |
![]() | 101 | 101.0.1210.47 | Windows 10 | edge101 | curl_edge101 |
![]() | 91 ESR | 91.6.0esr | Windows 10 | ff91esr | curl_ff91esr |
![]() | 95 | 95.0.2 | Windows 10 | ff95 | curl_ff95 |
![]() | 98 | 98.0 | Windows 10 | ff98 | curl_ff98 |
![]() | 100 | 100.0 | Windows 10 | ff100 | curl_ff100 |
![]() | 102 | 102.0 | Windows 10 | ff102 | curl_ff102 |
![]() | 109 | 109.0 | Windows 10 | ff109 | curl_ff109 |
![]() | 117 | 117.0.1 | Windows 10 | ff117 | curl_ff117 |
![]() | 15.3 | 16612.4.9.1.8 | MacOS Big Sur | safari15_3 | curl_safari15_3 |
![]() | 15.5 | 17613.2.7.1.8 | MacOS Monterey | safari15_5 | curl_safari15_5 |
此列表也可在browsers.json文件中找到。
对于每个支持的浏览器,都有一个包装脚本,可以使用所有必需的头部和标志来启动 curl-impersonate。例如:
curl_chrome116 https://www.wikipedia.org
您可以添加命令行标志,它们会被传递给 curl。但是,某些标志会改变 curl 的 TLS 签名,可能导致被检测到。
请注意,包装脚本使用默认的 HTTP 头部集。如果您想更改这些头部,可能需要修改包装脚本以适应您自己的目的。
有关更多选项,请参阅高级用法,包括将 libcurl-impersonate 作为库使用。
更多文档可在 docs/ 目录中找到。
由于技术原因,curl-impersonate 有两个版本。chrome 版本用于模仿 Chrome、Edge 和 Safari。firefox 版本用于模仿 Firefox。
Linux 和 macOS(Intel)的预编译二进制文件可在 GitHub 发布页面 获取。 在使用它们之前,您需要安装 nss(Firefox 的 TLS 库)和 CA 证书:
sudo apt install libnss3 nss-plugin-pem ca-certificatesyum install nss nss-pem ca-certificatespacman -S nss ca-certificatesbrew install nss ca-certificates还要确保您的系统上安装了 zlib。 zlib 几乎总是存在的,但在一些最小化系统上可能会缺失。
预编译的二进制文件包含 libcurl-impersonate 和静态编译的 curl-impersonate,便于使用。
预编译的 Linux 二进制文件是为 Ubuntu 系统构建的。在其他发行版上,如果证书验证出现错误,您可能需要告诉 curl 在哪里找到 CA 证书。例如:
curl_chrome116 https://www.wikipedia.org --cacert /etc/ssl/certs/ca-bundle.crt
另外,请务必阅读依赖项说明。
请参阅 INSTALL.md。
基于 Alpine Linux 和 Debian 的 Docker 镜像,已编译好 curl-impersonate 并可直接使用,可在 Docker Hub 上获取。这些镜像包含二进制文件和所有包装脚本。使用方法如下:
# Firefox 版本,Alpine Linux docker pull lwthiker/curl-impersonate:0.6-ff docker run --rm lwthiker/curl-impersonate:0.6-ff curl_ff109 https://www.wikipedia.org # Chrome 版本,Alpine Linux docker pull lwthiker/curl-impersonate:0.6-chrome docker run --rm lwthiker/curl-impersonate:0.6-chrome curl_chrome110 https://www.wikipedia.org
Archlinux 用户可以使用 AUR 包:
Mac 的非官方 Homebrew 配方(仅限 Chrome)可在这里获取:
brew tap shakacode/brew
brew install curl-impersonate
libcurl-impersonate.so 是使用与命令行 curl-impersonate 相同的更改编译的 libcurl。
它有一个额外的 API 函数:
CURLcode curl_easy_impersonate(struct Curl_easy *data, const char *target, int default_headers);
您可以使用目标名称调用它,例如 chrome116,它会在内部设置所有选项和头部,这些选项和头部通常由包装脚本设置。
如果 default_headers 设置为 0,则不会设置内置的 HTTP 头部列表,而是期望用户使用常规的 CURLOPT_HTTPHEADER libcurl 选项提供它们。
调用上述函数会设置以下 libcurl 选项:
CURLOPT_HTTP_VERSIONCURLOPT_SSLVERSION、CURLOPT_SSL_CIPHER_LIST、CURLOPT_SSL_EC_CURVES、CURLOPT_SSL_ENABLE_NPN、CURLOPT_SSL_ENABLE_ALPNdefault_headers 非零,则设置 CURLOPT_HTTPBASEHEADER(这是为本项目创建的非标准 HTTP 选项)。CURLOPT_HTTP2_PSEUDO_HEADERS_ORDER、CURLOPT_HTTP2_NO_SERVER_PUSH(为本项目创建的非标准 HTTP/2 选项)。CURLOPT_SSL_ENABLE_ALPS、CURLOPT_SSL_SIG_HASH_ALGS、CURLOPT_SSL_CERT_COMPRESSION、CURLOPT_SSL_ENABLE_TICKET(为本项目创建的非标准 TLS 选项)。CURLOPT_SSL_PERMUTE_EXTENSIONS(为本项目创建的非标准 TLS 选项)。
请注意,如果您之后使用 curl_easy_setopt() 设置上述选项之一,它将覆盖 curl_easy_impersonate() 设置的选项。如果您的应用程序已经使用 libcurl,您可以使用 LD_PRELOAD(仅限 Linux)在运行时替换现有库。然后,您可以设置 CURL_IMPERSONATE 环境变量。例如:
LD_PRELOAD=/path/to/libcurl-impersonate.so CURL_IMPERSONATE=chrome116 my_app
CURL_IMPERSONATE 环境变量有两个作用:
curl_easy_init() 创建的任何新 curl 句柄,自动调用 curl_easy_impersonate()。curl_easy_reset() 调用之后自动调用 curl_easy_impersonate()。这意味着所有用于模仿的必要选项将自动为任何 curl 句柄设置。
如果您需要精确控制 HTTP 头部,请设置 CURL_IMPERSONATE_HEADERS=no 以禁用内置的 HTTP 头部列表,然后使用 curl_easy_setopt() 自行设置它们。例如:
LD_PRELOAD=/path/to/libcurl-impersonate.so CURL_IMPERSONATE=chrome116 CURL_IMPERSONATE_HEADERS=no my_app
请注意,LD_PRELOAD 方法不适用于 curl 本身,因为 curl 工具会覆盖 TLS 设置。请改用包装脚本。
如果您打算将自编译的工件复制到另一个系统,或使用项目提供的预编译二进制文件,请确保目标系统上也满足所有额外的依赖项。 特别是,请参阅关于 Firefox 版本的说明。
此仓库包含两个主要文件夹:
两者的布局相似。例如,Firefox 目录包含:
curl-impersonate。curl-impersonate 的包装脚本。其他值得关注的文件:
如果你想提供帮助,请查看未解决的问题。你可以提交一个包含你的更改的拉取请求。
这个仓库包含 curl-impersonate 的构建过程。对 curl 的实际补丁维护在一个单独的仓库中,该仓库从上游 curl 分叉而来。这些更改维护在 impersonate-firefox 和 impersonate-chrome 分支中。
赞助商帮助保持这个项目开放和维护。如果你想成为赞助商,请直接联系我:lwt at lwthiker dot com。
<a href="https://serpapi.com/"> <img src="https://i.imgur.com/CBOSxrm.png" alt="Logo" width="165px" height="65px"> </a>

企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。


AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。


一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号