百趣云
百趣云的博客
🔖TLS指纹
TLS 指纹之后还有 H2 指纹过了 JA3 检测却被更隐蔽的指纹拦下——问题可能出在 HTTP/2 层。现代网站 90%+ 走 HTTP/2,而 H2 连接的建立过程同样暴露客户端实现:SETTINGS 帧:参数集合和值(HEADER_TABLE_SIZE、INITIAL_WINDOW_SIZE 等)WINDOW_UPDATE 帧:窗口增量的数值HEADERS 帧:伪头顺序(:method :path :authority :scheme 还是别的排列)优先级策略:PRIORITY 帧的使用模式这些全部由 HTTP/2 库的实现决定——Chrome 的 netstack、nghttp2(cu
curl_cffi 为什么是当前的最优解Python 爬虫的 TLS 指纹伪装方案演进:requests(无伪装)→ pyhttpx/tls-client(半吊子)→ curl_cffi(完整方案)。curl_cffi 胜出的原因:基于 curl-impersonate,TLS 指纹逐字节级复刻(不只是 JA3,整个 ClientHello 的字节序都对)HTTP/2 指纹同步模拟(SETTINGS 帧、优先级、窗口更新全对齐浏览器)API 兼容 requests,迁移成本几乎为零pip install curl_cffi基础用法:和 requests 几乎一样from curl_cffi i
JA3:TLS 握手的"指纹"你的爬虫参数全对、ua 完美伪装,还是被 Cloudflare/Akamai 秒拒——问题出在 TLS 指纹。TLS 握手的第一条消息(ClientHello)里包含:支持的 TLS 版本列表加密套件(cipher suites)列表及顺序扩展(extensions)列表及顺序椭圆曲线、签名算法等参数这些字段的组合由TLS 库的实现决定:Chrome 的 BoringSSL、Firefox 的 NSS、Python 的 OpenSSL、Go 的 crypto/tls,各有各的固定模式。JA3 就是把这些字段拼起来算 md5:JA3 = md5(TLS版本,加密套件