使用 curl_cffi 解决 Web 抓取中的 TLS/JA3 指纹识别方法

news2024/11/14 3:58:04

在这里插入图片描述

在网站抓取过程中遇到反爬虫措施而苦苦挣扎?curl_cffi 是一个高级 Python 库,它包装了 cURL 工具,可以帮助您有效地绕过这些障碍。通过模拟浏览器行为并利用 cURL 的功能,curl_cffi 增强了您的抓取器避免检测并顺利执行的能力。在本指南中,我们将探讨 curl_cffi 的工作原理、如何将其用于各种任务以及其局限性。我们还将讨论克服这些局限性的潜在解决方案。

什么是 curl_cffi?

curl_cffi 是一个专为网络请求设计的 Python 库,类似于 requestshttpx 等库。然而,与这些库不同的是,curl_cffi 可以模拟浏览器 TLS/JA3 和 HTTP/2 指纹。curl-impersonate 是一个命令行工具,可以模拟四种主要浏览器并执行 TLS 和 HTTP 握手,就像真实的浏览器一样。curl_cffi 使用 cfficurl-impersonate 包装成 Python 库。

难以解决令人厌烦的验证码,反复失败?

使用 CapSolver 的 AI 驱动的自动网页解封技术,发现无缝的自动验证码解决方案!

领取您的 奖励代码 以获得顶级验证码解决方案;CapSolver: WEBS。兑换后,每次充值后您将获得额外 5% 的奖励,无限使用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

什么是 TLS/JA3 指纹?

如今,大多数网站使用 HTTPS。为了建立 HTTPS 连接,服务器和客户端之间会进行 TLS 握手,交换信息,例如支持的 TLS 版本和加密算法。不同的客户端具有不同的特征,这些细节通常是稳定的,允许服务器识别请求是来自典型用户浏览器还是自动化脚本。JA3 是一个常用的算法,用于生成 TLS 指纹。它的工作原理是将这些特征连接起来并计算 MD5 哈希值。

使用 curl_cffi

curl_cffi 的使用方法与 requests 非常相似。以下是如何使用 requests 获取 JA3 指纹:

import requests

url = "https://tls.browserleaks.com/json"
r = requests.get(url)
print(r.json())

你可能会得到类似下面的结果:

{
    "user_agent": "python-requests/2.32.3",
    "ja3_hash": "8d9f7747675e24454cd9b7ed35c58707",
    "ja3_text": "771,4866-4867-4865-49196-49200-49195-49199-52393-52392-159-158-52394-49327-49325-49326-49324-49188-49192-49187-49191-49162-49172-49161-49171-49315-49311-49314-49310-107-103-57-51-157-156-49313-49309-49312-49308-61-60-53-47-255,0-11-10-16-22-23-49-13-43-45-51-21,29-23-30-25-24,0-1-2",
    "ja3n_hash": "a790a1e311289ac1543f411f6ffceddf",
    "ja3n_text": "771,4866-4867-4865-49196-49200-49195-49199-52393-52392-159-158-52394-49327-49325-49326-49324-49188-49192-49187-49191-49162-49172-49161-49171-49315-49311-49314-49310-107-103-57-51-157-156-49313-49309-49312-49308-61-60-53-47-255,0-10-11-13-16-21-22-23-43-45-49-51,29-23-30-25-24,0-1-2",
    "akamai_hash": "",
    "akamai_text": ""
}

如果您反复发出请求,您会发现您的 JA3 哈希值保持不变。然而,从 Chrome 110 版本开始,TLS ClientHello 扩展的顺序被随机化,这使得网站开发者更容易根据 JA3 指纹来阻止像 requests 这样的库。如果您的请求始终显示相同的 JA3 指纹,它们可能会被识别为来自单个用户,从而增加被标记为机器人的可能性。

以下是如何使用 curl_cffi 来模拟真实的 JA3 指纹:

from curl_cffi import requests

url = "https://tls.browserleaks.com/json"
r = requests.get(url, impersonate="chrome124")
print(r.json())

impersonate 参数允许您指定要模拟的浏览器和版本。支持的浏览器包括 Chrome、Chrome Android、Edge 和 Safari,版本不断更新。有关详细信息,请参阅 curl_cffi GitHub 仓库。使用 curl_cffi,JA3 指纹将与真实浏览器的指纹一致,并且从 Chrome 110 版本开始,JA3 指纹将在每次请求时发生变化:

{
    "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "ja3_hash": "c97c8dac4ca1de968fe230de54f3e0f3",
    "ja3_text": "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,16-10-27-18-5-51-23-17513-45-35-43-13-65281-0-11-65037,25497-29-23-24,0",
    "ja3n_hash": "4c9ce26028c11d7544da00d3f7e4f45c",
    "ja3n_text": "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-5-10-11-13-16-18-23-27-35-43-45-51-17513-65037-65281,25497-29-23-24,0",
    "akamai_hash": "52d84b11737d980aef856699f885ca86",
    "akamai_text": "1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p"
}

解决 curl_cffi 的限制

虽然 curl_cffi 可以模拟真实的 JA3 指纹,并可能避免机器人挑战和封锁,但它可能并不总是足够。许多网站实施了先进的机器人保护机制,例如 hCaptcha、reCaptcha、Geetest、Cloudflare Turnstile、DataDome 和 AWS WAF。这些系统使用复杂的图像和难以阅读的 JavaScript 挑战来区分人和机器人。有时,即使拥有真实且随机化的 JA3 指纹,也无法避免绕过这些挑战。

如果您遇到 CAPTCHA 挑战,无论您使用哪个请求库,它们都可能是不可避免的。但是,无需担心。CapSolver 为这些问题提供了解决方案。CapSolver 使用基于 AI 的自动化网页解锁技术,可在几秒钟内解决各种机器人挑战。无论处理图像还是复杂问题,CapSolver 都能高效地处理。如果解决方案失败,您将不会产生任何费用。

CapSolver 还提供浏览器扩展,可使用 Selenium 在数据抓取过程中自动解决 CAPTCHA。此外,还提供 API 解决方案,用于在 Scrapy 等框架中解决 CAPTCHA 并获取令牌。所有这些都可以在几秒钟内完成。有关更多详细信息,请参阅 CapSolver 文档。

结论

通过将 curl_cffi 集成到您的网页抓取设置中,您可以有效地模拟真实浏览器行为,以克服 TLS/JA3 指纹挑战。虽然 curl_cffi 为处理这些挑战提供了强大的工具,但高级 CAPTCHA 和机器人检测系统仍然构成重大障碍。CapSolver 提供了一种补充解决方案,可以无缝解决这些 CAPTCHA 挑战,确保您的抓取活动顺利运行。

如需了解更多见解和资源,请访问 CapSolver 网站 并探索 curl_cffi GitHub 仓库。

CapsolverCN官 方代理交流扣 群:497493756

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

索迪迈科技油罐车监控系统中车载摄像头的布局策略

随着科技的不断发展,车载监控系统在油罐车上的安装已经成为了一种趋势。这不仅大大降低了车辆的安全隐患与运营成本,更对石油运输企业优化资源配置、提高市场竞争力起到了积极的促进作用。那么,在油罐车监控系统中,如何合理布局车…

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现根据每次触发信号移动感兴趣区域ROI(Python)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现根据每次触发信号移动感兴趣区域ROI(Python) Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过NEOAPI SDK使用定序器功能预期的相机动作测试的图像效果 Baumer工业相机通过NEOAPI S…

LoRA - 大型语言模型的低秩适应方法

人工智能咨询培训老师叶梓 转载标明出处 大规模预训练模型,如GPT-3,拥有高达1750亿参数,全参数微调不仅计算成本高昂,而且部署和维护多个微调实例变得非常困难。而且全参数微调需要大量的GPU内存,限制了同时训练的模型…

go 切片slice学习总结

切片的结构 切片的底层结构: type SliceHeader struct {Data uintptr // 指向底层数组的指针 Len int //长度Cap int //空间容量 } 切片的初始化 1 通过数组或者已有的slice创建新的slice 1.1 使用数组创建切片 通过数组的一部分来初始化切片。 …

fixed、absolute 和 relative 布局

https://andi.cn/page/621716.html

计算机视觉编程 1(图片处理)

目录 灰色度 缩略图 拷贝粘贴区域 调整图像尺寸 旋转图像45 画图线、描点 灰色度 灰度是指图像中每个像素的亮度值,用来描述图像中各个像素的明暗程度。在计算机视觉中,灰度可以通过以下方式来计算: 1. 平均值法:将图像中每…

核心技术揭秘:AI、低代码与定制开发的三重奏,如何应对复杂业务需求

背景介绍 在当今迅速发展的数字化时代,企业面临的业务环境变得日益复杂和多变。无论是面对不断变化的市场需求,还是处理海量数据并从中获取洞察力,企业都需要快速响应并灵活调整自身的策略。传统的开发模式在应对这种复杂性时往往显得力不从心…

大模型提示词工程技术2-设计有效的提示词技巧、角色与上下文在提示中的应用

大模型提示词工程技术2-设计有效的提示词技巧、角色与上下文在提示中的应用。《大模型提示词工程技术》的作者:微学AI,这是一本专注于提升人工智能大模型性能的著作,它深入浅出地讲解了如何通过优化输入提示词来引导大模型生成高质量、准确的…

技术赋能数字化转型:百数低代码平台在试点城市的应用与实践

在当今信息化高速发展的时代,数字化转型已成为城市和企业发展的必然趋势。为了推动这一进程,数字化转型城市试点政策应运而生。“据了解,中央财政将对每个试点城市给予1亿元资金奖补,支持中小企业实施数字化改造,以数字…

5 - ZYNQ GPIO

文章目录 0 前言1 GPIO基本概念1.1 MIO-EMIO基本介绍1.2 MIO-EMIO连接情况 0 前言 本文来参考博主徐晓康的博文 ZYNQ7000-GPIO详解,仅作为个人学习记录。 1 GPIO基本概念 在ZYNQ中,GPIO(General Purpose Input/Output,通用输入…

嵌入式RTOS正在缩小与Linux系统之间的差异

RTOS与Linux的物联网设备操作系统之争已经持续了很多年。Linux以其强大的计算能力和丰富的软件生态,在需要复杂处理和软件支持的物联网设备上占据一席之地;RTOS凭借实时响应和资源节约的特性,在对实时性和资源占用有严格要求的场景中独领风骚。 如果时间倒回五年前,那…

[C++] C++11详解 (三)类的成员函数、完美转发

标题:[C] C11详解 (三)完美转发与lambda表达式 水墨不写bug 目录 一、C11新增两个类的默认成员函数 1.强制生成默认函数的关键字default: 2.禁止生成默认函数的关键字delete: 二、完美转发 正文开始: 一、C11新增两个类的默…

【YOLO5 项目实战】(8)PyQt5 图形界面—PCB缺陷检测系统

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO5 项目实战】(8)PyQt5 图形界面—PCB缺陷检测系统 1. PyQt5 图形界面开发工具1.1 PyQt5 的安装1.2 在 PyCharm 集成 QtDesigner 和 PyUIC1.3 使用 QtDesigner 开发 PyQt…

EPLAN在安装完成之后,输入文字时出现卡顿和死机的解决办法

EPLAN在安装完成之后,输入文字时出现卡顿和死机的解决办法 EPLAN在安装完成之后,插入文字时有时会卡顿,甚至出现软件卡死,无任何反映的情况,具体的解决办法可参考以下内容: 找到电脑右下角的输入法,右击进入设置, 如下图所示,点击进入常规设置, 如下图所示,向下找…

终于!我找到了开发的得力助手!阿里云天池云原生编程挑战赛参赛攻略

作者:ysevenk_7 参赛准备 我是机缘巧合在 6 月底了解到了天池云原生编程挑战赛,于是乎搜了一下,之前本人对于比赛并没有太多经验,看了大赛介绍之后莫名兴奋,果断拉了队友报名,完成认证、起队名、下载插件…

【STM32】RS485

RS485是常见的串口接口。 大部分图片来源:正点原子HAL库课程 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 1 串口、UART、TTL、RS232、RS422、RS485的关系 1.1 串口 1.2 UART、TTL、RS232、RS422、RS485 1.3 常见串口标准的比较 …

Apache Arrow 的列式内存格式

Apache Arrow 的列式存储格式是一种内存数据组织标准,它通过物理布局、Array(数组)、Schema(模式)和 RecordBatch(记录批次)等,优化了大数据的存储与处理。这种格式以列而非行来存储…

更改网络ip地址时出现错误怎么办

在日常的网络使用中,‌有时我们需要更改IP地址以满足特定的网络需求,‌然而,‌在更改IP地址的过程中,‌可能会遇到各种错误,‌导致无法成功更改或网络连接出现问题。‌‌而更改网络IP地址时出现错误是由于多种原因导致…

二、基于Vue3的开发-环境搭建【Visual Studio Code】扩展组件

Visual Studio Code中的扩展组件 1、安装的扩展工具2、说明2.1 、代码规范性检查EsLint2.2 、代码语法高亮提示工具Vue - Official2.3 、阿里的AI代码开发提示工具 TONGYI Lingma 1、安装的扩展工具 2、说明 2.1 、代码规范性检查EsLint Visual Studio Code 中【设置】-setti…

基于元神操作系统编程写硬盘扇区

1. 背景 本文介绍了“调用元神操作系统API向硬盘扇区写数据”的程序实现及测试结果。 2. 方法 (1)调用元神操作系统API读硬盘扇区 本部分内容已在前面的文章中进行介绍,详细内容请参考“编写程序调用元神操作系统的API”。 (…