python 使用curl_cffi 繞過jax3指紋-Cloudflare 5s盾

現在越來越多的網站已經能夠通過JA3或者其他指紋信息,來識別你是不是爬蟲了。傳統的方式比如換UA,加代理是沒有任何意義了,所以這個時候我們就需要使用到curl_cffi 了。

1.TLS 指紋是啥?

在絕大多數的網站都已經使用了 HTTPS,要建立 HTTPS 鏈接,服務器和客戶端之間首先要進行
TLS 握手,在握手過程中交換雙方支持的 TLS 版本,加密算法等信息。不同的客戶端之間的差異
很大,而且一般這些信息還都是穩定的,所以服務端就可以根據 TLS 的握手信息來作為特征,識別
一個請求是普通的用戶瀏覽器訪問,還是來自 Python 腳本等的自動化訪問。

JA3 是生成 TLS 指紋的一個常用算法。它的工作原理也很簡單,大概就是把以上特征拼接并求 md5。

查看 tls 指紋的網站有:

  • https://tls.browserleaks.com/json
  • TrackMe | Home
  • https://kawayiyi.com/tls

不同網站的生成的指紋可能有差異,但是多次訪問同一個網站生成的指紋是穩定的,而且能區分開
不同客戶端。下文以第一個網站為例。

2.直接安裝

pip install curl_cffi

功能簡介:

  • 支持JA3/TLS和http2指紋模擬;
  • 比requests/tls_client快分開,和aiohttp/pycurl的速度比肩;
  • 預編譯,不需要自己的機器上再弄一遍;
  • 支持asyncio,并且每個請求都可以換代理;
  • 修改請求的API,支持http 2.0;
  • 模仿requests。

先來看一段代碼:

import requests
from pprint import pprint
headers = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','cache-control': 'no-cache','dnt': '1','pragma': 'no-cache','sec-ch-ua': '"Chromium";v="118", "Microsoft Edge";v="118", "Not=A?Brand";v="99"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"macOS"','sec-fetch-dest': 'document','sec-fetch-mode': 'navigate','sec-fetch-site': 'same-origin','sec-fetch-user': '?1','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46',
}response = requests.get('https://tls.browserleaks.com/json', headers=headers)
pprint(response.json())

運行效果:

在這里插入圖片描述

這是直接使用Requests發起的請求。你可以試一試,加上代理以后,這里的ja3_hash并不會發生變化。并且akamai_hashakamai_text都是空。這個特征是非常明顯的,網站直接根據這些特征就可以屏蔽你的爬蟲。

于是為了完美模擬瀏覽器,國外大佬開發出了 curl-impersonate,將 curl 底層依賴的庫全部換成了瀏覽器使用的庫,并且版本也是一致的,這樣生成的指紋就和瀏覽器完全一樣了。

而 curl_cffi 正是 curl-impersonate 的 Python binding,我們直接使用 pip 安裝即可。

那這個問題咋解決尼?

只需要 把 import requests 改成 from curl_cffi import requests。最后,在requests.get中加一個參數:impersonate="chrome110"

代碼如下:

# import requests
from curl_cffi import requests
from pprint import pprint
headers = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','cache-control': 'no-cache','dnt': '1','pragma': 'no-cache','sec-ch-ua': '"Chromium";v="118", "Microsoft Edge";v="118", "Not=A?Brand";v="99"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"macOS"','sec-fetch-dest': 'document','sec-fetch-mode': 'navigate','sec-fetch-site': 'same-origin','sec-fetch-user': '?1','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46',
}response = requests.get('https://tls.browserleaks.com/json', headers=headers, impersonate="chrome110")
pprint(response.json())

這次再運行下代碼:

在這里插入圖片描述

這次可以看到akamai_hashakamai_text 已經都有了,網站已經無法識別你的爬蟲了。在網站看來,這只是一個Chrome 110版本發起的請求。甚至Akamai需要的簽名也都有了。

支持使用 Sessions

session = requests.Session()

也支持使用代理

proxies = {"https": "xxxxx:7890"}
proxies=proxies

支持模擬的瀏覽器版本:

  • chrome99、
  • chrome100、
  • chrome101、
  • chrome104、
  • chrome107、
  • chrome110、
  • chrome99_android、
  • edge99、
  • edge101、
  • safari15_3、
  • safari15_5

同樣它也支持asyncio,示例代碼如下所示:

from curl_cffi.requests import AsyncSessionasync with AsyncSession() as s:r = await s.get("https://example.com")

要使用異步寫法時,代碼如下:

import asyncio
from curl_cffi.requests import AsyncSessionurls = ["https://googel.com/","https://facebook.com/","https://twitter.com/",
]async def main():async with AsyncSession() as s:tasks = []for url in urls:task = s.get("https://example.com")tasks.append(task)results = await asyncio.gather(*tasks)asyncio.run(main())

我們以這個網站為例: https://apk.support/ 分析下:

在這里插入圖片描述

瀏覽器抓包是能看到頁面返回的關鍵數據,但是再把這個請求放到postman 發個請求試一下:

在這里插入圖片描述
Just a moment...,完蛋涼了 標志性的5s盾。

咋辦 用curl_cffi 發個請求試一試?

代碼如下:

# import requests
from curl_cffi import requests
url = "https://apk.support/search?q=app"payload={}
headers = {'authority': 'apk.support','accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','accept-language': 'zh-CN,zh;q=0.9,en;q=0.8','cache-control': 'no-cache','pragma': 'no-cache','referer': 'https://apk.support/search?q=app','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"macOS"','sec-fetch-dest': 'document','sec-fetch-mode': 'navigate','sec-fetch-site': 'same-origin','sec-fetch-user': '?1','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
proxies = {'http': 'http://127.0.0.1:7890','https': 'http://127.0.0.1:7890'
}
response = requests.get(url=url, headers=headers, impersonate="chrome110", proxies=proxies)print(response.text)

看看效果:

在這里插入圖片描述

可以看到返回的已經是正常數據,不再是5s盾了。

參考鏈接:

https://mp.weixin.qq.com/s/Ch7taYpD-dnNL2FLOuxgGA
https://blog.csdn.net/qiulin_wu/article/details/134180011
https://blog.csdn.net/resphina/article/details/132507212
https://www.jb51.net/python/302044jai.htm

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714451.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714451.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714451.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

構造pop鏈

反序列化視頻筆記 第一步:找到目標觸發echo調用$flag 第二步:觸發_invoke函數調用appeng函數$varflag.php(把對象當成函數) 第三步:給$p賦值為對象,即function成為對象Modifier卻被當成函數調用&#xff…

加密與安全_探索口令加密算法(PBE)

文章目錄 概述疑問PBE 算法 ( Password Based Encryption)CodePOM實現 小結 概述 加密與安全_探索對稱加密算法中我們提到AES加密密鑰長度是固定的128/192/256位,而不是我們用WinZip/WinRAR那樣,隨便輸入幾位都可以。 這是因為對…

2024最新算法:斑翠鳥優化算法(Pied Kingfisher Optimizer ,PKO)求解23個基準函數

一、斑翠鳥優化算法 斑翠鳥優化算法(Pied Kingfisher Optimizer ,PKO),是由Abdelazim Hussien于2024年提出的一種基于群體的新型元啟發式算法,它從自然界中觀察到的斑翠鳥獨特的狩獵行為和共生關系中汲取靈感。PKO 算法圍繞三個不…

【Ubuntu操作系統】講解

Ubuntu操作系統 1. 前言2. 系統更新3. 安裝編譯工具4. 安裝文本編輯器4.1 Vim4.2 Visual Studio Code 5. 安裝開發庫6. 安裝版本控制系統6.1 Git 7. 安裝數據庫7.1 MySQL7.2 PostgreSQL 8. 安裝編程語言環境8.1 Python8.2 Node.js 9. 安裝其他常用軟件9.1 Chrome瀏覽器9.2 Dock…

MySQL數據庫引擎,以及常用引擎的區別

先看圖: mysql常用引擎包括:MYISAM、Innodb、Memory、MERGE MYISAM: 全表鎖,擁有較高的執行速度,不支持事務,不支持外鍵,并發性能差,占用空間相對較小,對事務完整性沒有…

SpringBoot整合rabbitmq-主題交換機隊列(四)

說明:Topic主題交換機它的大致流程是交換機和一個或者多個隊列綁定,這個綁定的Routingkey是包含通配符的,滿足通配符的隊列會接收到消息。 通配符規則: #:匹配一個或多個詞 *:匹配一個詞 例如&#xff…

2024洗地機深度測評推薦,洗地機哪款值得入手?新手入門必看洗地機選購技巧

洗地機是近年來備受矚目的智能家居產品,它能夠有效地幫助我們節省勞動時間,高效清潔地面,從而減輕我們的勞動負擔。洗地機實現了掃地和拖地的一體化功能,在掃地的同時還能順便完成地面的拖洗工作。配備水箱的設計使得不再需要頻繁…

【kubernetes VPA】記錄一次安裝 VPA 相關組件的報錯解決過程

文章目錄 1. 問題描述2. 問題原因3. 解決辦法4. 參考鏈接 1. 問題描述 在執行 ./hack/vpa-up.sh腳本命令時,提示有報錯。名為vpa-admission-controller的容器狀態一直停留在ContainerCreating,從該Pod詳細描述中得知,volume "tls-certs…

內核參數調優

默認的Linux內核參數考慮的是最通用場景,不符合用于支持高并發訪問的Web服務器的定義,根據業務特點來進行調整,當Nginx作為靜態web內容服務器、反向代理或者提供壓縮服務器的服務器時,內核參數的調整都是不同的,此處針…

【牛客】SQL131 作答試卷得分大于過80的人的用戶等級分布

描述 現有用戶信息表user_info(uid用戶ID,nick_name昵稱, achievement成就值, level等級, job職業方向, register_time注冊時間): iduidnick_nameachievementleveljobregister_time11001牛客1號31007算法2020-01-01 10:00:00210…

常見外設學習以及無線通信頻率

常見外設 UART UART(Universal Asynchronous Receiver/Transmitter,通用異步收發器)是一種異步、串行、全雙工的通信總線。 UART 有3根線,分別是:發送線(TX)、接收線(RX&#xff…

AT24C1024的模擬IIC驅動

AT24C1024是基于IIC的EEPROM,容量為1024/8128k bytes。它的引腳如下: 其中A1,A2為硬件地址引腳 WP為寫保護引腳,一般我們需要讀寫,需要接低電平GND,接高的話則僅允許讀 SDA和SCL則為IIC通信引腳 芯片通信采用IIC&…

02、MongoDB -- MongoDB 的安全配置(創建用戶、設置用戶權限、啟動安全控制、操作數據庫命令演示、mongodb 的幫助系統介紹)

目錄 MongoDB 的安全配置演示前準備:啟動 mongodb 服務器 和 客戶端 :1、啟動單機模式的 mongodb 服務器2、啟動 mongodb 的客戶端 MongoDB 的安全配置啟動演示用到的 mongodb 服務器 和 客戶端啟動單機模式的 mongodb 服務器:啟動 mongodb 的…

【數據結構】19 平衡二叉樹

定義 平衡二叉樹又稱為AVL樹,是具有以下性質的非空搜索樹: 任一結點的左、右子樹均為AVL樹。根節點的左、右子樹高度差的絕對值不超過1. 對于二叉樹的任一結點T,其平衡因子(BF)定義為BF(T) h L ? h R h_L- h_R hL…

acwing算法提高之搜索--雙向廣搜BFS與A星算法

目錄 1 專題說明2 訓練 1 專題說明 本專題用來記錄使用雙向廣搜BFS和A星算法求解的題目。 2 訓練 題目1&#xff1a;190字串變換 考點&#xff1a;從起點開始搜&#xff0c;從終點開始搜&#xff0c;即雙向廣搜。 C代碼如下&#xff0c; #include <iostream> #incl…

攻防世界-get_post

題目信息 相關知識 -G&#xff1a;表示GET請求&#xff0c;缺省POST -d參數用于發送 POST 請求的數據體 使用-d參數以后&#xff0c;HTTP 請求會自動加上標頭Content-Type : application/x-www-form-urlencoded。并且會自動將請求轉為 POST 方法&#xff0c;因此可以省略-X PO…

使用GPTQ進行4位LLM量化

使用GPTQ進行4位LLM量化 最佳腦量化GPTQ算法步驟1:任意順序洞察步驟2:延遲批量更新第三步:喬爾斯基重塑 用AutoGPTQ量化LLM結論References 權重量化的最新進展使我們能夠在消費級硬件上運行大量大型語言模型&#xff0c;例如在RTX 3090 GPU上運行LLaMA-30B模型。這要歸功于性能…

信息收集2.0版本

內網滲透之信息收集 whois查詢 1.1.1.1. 在線網站查詢 輸入相關的域名即可進行查詢。 &#xff08;1&#xff09;站長之家&#xff1a;whois域名查詢&#xff1a;http://whois.chinaz.com/ &#xff08;2&#xff09;愛站工具網&#xff1a;whois域名查詢&#xff1a;站長…

mysql數據庫操作小寄巧

目錄 json字段查詢時間相關只有日期只有時間又有時間又有日期時間比較時間運算 某字段同的取最新數據&#xff08;軟性的新數據覆蓋舊數據查找&#xff09;sql_modeonly_full_group_by的解決辦法優化思路 json字段查詢 查詢某個json字段&#xff08;xx&#xff09;的某個屬性下…

【考研數學】零基礎備考全年計劃

25考研數學基礎差&#xff0c;一定要重視基礎的復習&#xff01; 基礎不牢&#xff0c;地動山搖&#xff0c;這句話在如今的考研更加貼切 24考研的新形勢&#xff1a; 重基礎、計算量大、反押題 每一個變化對于基礎差的同學都不是好消息。 做過近幾年考研真題的人都會發現…