好库推荐|两个解决ja3检测的Python库,强烈推荐
关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
某佬丢过来一个网站,我用requests库请求会报错:
先说下我的环境: Win10 + Python 3.10 + requests 2.27.1,直接请求的话报错了,我猜测是检测了tls,听说降低Python和requests的版本可以正常请求,或许检测不那么严格。
下面介绍两个库,过掉它的检测。
1. Pyhttpx
项目地址:
https://github.com/zero3301/pyhttpx
你可以将整个项目下载下来,也可以直接安装这个库:
pip install pyhttpx
我选择的是将整个项目下载下来测试,根据他的demo,写下请求代码:
import pyhttpxsess = pyhttpx.HttpSession()headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
}url = "打码了"response = sess.get(url)print(response.text)
可以正常返回了:
完美解决!
这个项目的优秀之处在于可以修改成指定的ja3加密套件,还能在Windows下运行,非常的nice!当然我在测试某些网站的时候报错了,项目还不是那么完美,期待解决。
2. Pycurl
目前这个库在Windows上还没办法解决ja3的问题,因此我选择了Liunx.
环境:
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
如何安装并解决ja3,可以参考华哥的这篇文章 python完美突破tls/ja3
也可以参考我在星球里写的:
https://t.zsxq.com/052z3rzN3
如果你在服务器上输入下面的命令可以正常返回,说明安装成功了.
curl_chrome100 https://www.baidu.com
把下面的请求demo代码上传到服务器:
import pycurl
import copy
from io import BytesIO
import re
import io
import randomclass Response:def __init__(self, status_code, body, headers):self.status_code = status_codeself.body = bodyself.headers = headers@propertydef text(self, encode="utf-8"):return self.body.decode(encode)class CurlClient:def __init__(self):c = pycurl.Curl()# 自动维护cookiec.setopt(pycurl.COOKIEFILE, "")c.setopt(pycurl.TIMEOUT, 30)# 开启alpnc.setopt(pycurl.SSL_ENABLE_ALPN, 1)c.setopt(pycurl.SSL_ENABLE_NPN, 0)# 跳转c.setopt(pycurl.FOLLOWLOCATION, 1)# 处理gzipc.setopt(pycurl.ENCODING, "gzip,deflate")# 是否验证sslc.setopt(pycurl.SSL_VERIFYPEER, 1)c.setopt(pycurl.SSLVERSION, pycurl.SSLVERSION_TLSv1_2)try:c.setopt(pycurl.SSL_CERT_COMPRESSION, "brotli")c.setopt(pycurl.SSL_ENABLE_ALPS, 1)except:pass# 设置代理# c.setopt(pycurl.PROXY, "http://127.0.0.1:9091")# c.setopt(pycurl.PROXY, "http://127.0.0.1:7890")# 加密套件c.setopt(pycurl.SSL_CIPHER_LIST,"TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-ECDSA-CHACHA20-POLY1305,ECDHE-RSA-CHACHA20-POLY1305,ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES256-SHA,AES128-GCM-SHA256,AES256-GCM-SHA384,AES128-SHA,AES256-SHA",)self.c = cself._cookies = {}def get(self, url, headers=[]):self.c.setopt(pycurl.POST, 0)r = self.send(url, headers)return rdef post(self, url, data, isjson=False, headers=[]):self.c.setopt(pycurl.POST, 1)self.c.setopt(pycurl.POSTFIELDS, data)h = copy.deepcopy(headers)if isjson:h.append("Content-Type: application/json")r = self.send(url, h)return rdef send(self, url, headers):body = BytesIO()resp_header = BytesIO()h = self.default_headersh.extend(headers)self.c.setopt(pycurl.HTTPHEADER, h)self.c.setopt(pycurl.URL, url)self.c.setopt(pycurl.WRITEDATA, body)self.c.setopt(pycurl.WRITEHEADER, resp_header)self.c.perform()r = Response(self.c.getinfo(pycurl.HTTP_CODE),body.getvalue(),resp_header.getvalue().decode(),)self.save_cookies(resp_header.getvalue().decode())return rdef save_cookies(self, resp_header):cookies = re.findall("Set-Cookie: (.*?);", resp_header, re.IGNORECASE)for cookie in cookies:k, v = cookie.split("=", 1)self._cookies[k] = vdef set_proxy(self, proxy):self.c.setopt(pycurl.PROXY, proxy)@propertydef cookies(self):return self._cookies@propertydef default_headers(self):h = ['sec-ch-ua: ".Not/A)Brand";v="99", "Microsoft Edge";v="103", "Chromium";v="103"',"sec-ch-ua-mobile: ?0",'sec-ch-ua-platform: "Windows"',"upgrade-insecure-requests: 1","user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36 Edg/103.0.1264.44","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.9","sec-fetch-site: none","sec-fetch-mode: navigate","sec-fetch-user: ?1","sec-fetch-dest: document","accept-encoding: gzip, deflate, br","sccept-language: en-US,en;q=0.9",]return hdef test_curl():c = CurlClient()resp = c.get("打码了")print(resp.text)if __name__ == "__main__":test_curl()
运行后,也返回了正常的数据l
今天的文章就分享到这里,后续分享更多的技巧,敬请期待。
欢迎加入知识星球,学习更多AST和爬虫技巧。
好库推荐|两个解决ja3检测的Python库,强烈推荐相关推荐
- 终于把python的所有库整理完毕了,现在一篇python库的字典诞生了
库名称简介 添加小编学习群 832339352 即可自动获取大量python视频教程以及各类PDF! Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文 ...
- python 抓取网页 库_5种流行的Web抓取Python库,你用过哪种?
"我们有足够的数据"这句话,在数据科学领域并不存在. 我很少会听到有人拒绝为他们的机器学习或深度学习项目收集更多的数据,往往都是永远觉得自己拥有的数据不够多. 为了缓解这种&quo ...
- 推荐一些能能提高生产力的 Python 库
" 阅读本文大概需要 3 分钟. " 一门语言好用.方便的程度在很多时候会取决于这门语言相关的库够不够丰富,Python 之所以火爆除了其本身的语法和特性之外,还在一定程度上取决于 ...
- 墙裂推荐!10个非常有趣的Python库!
这是"菜鸟学Python",第"500"篇原创 大家好,我是菜鸟哥!学Python就等你啦! 爆款文案 1).卧槽!Pdf转Word用Python轻松搞定! 2 ...
- python 常用库_Python程序员解决棘手问题的常用库
无论做为Python大牛,还是一个Python菜鸟,在编程的道路上都会遇到诸多种很棘手的问题.如下介绍的内个库是Python诸多问题解决中,最常用到的.希望这些Python的库可以帮您快速解决遇到的棘 ...
- python dash库_15个好用到哭的python库,太牛了!
为什么我喜欢Python?对于初学者来说,这是一种简单易学的编程语言,另一个原因:大量开箱即用的第三方库,正是23万个由用户提供的软件包使得Python真正强大和流行. 在本文中,我挑选了15个最有用 ...
- python最好用的库_15个好用到哭的python库,太牛了!
为什么我喜欢Python?对于初学者来说,这是一种简单易学的编程语言,另一个原因:大量开箱即用的第三方库,正是23万个由用户提供的软件包使得Python真正强大和流行. 在本文中,我挑选了15个最有用 ...
- python库Camelot从pdf抽取表格数据以及python库camelot安装及使用中的一些注意事项
一.python库camelot安装及使用中的一些注意事项 1)camelot方法有两种解析模式:流解析(stream).格子解析(lattice),其中格子解析能够保留表格完整的样式,对于复杂表格来 ...
- python矩阵处理库_用于处理非常大的矩阵的Python库
什么是用于处理非常大的矩阵(例如数百万行/列)的优秀 Python库,包括在矩阵生命的任何阶段添加行或列的能力? 我查看过pytables和h5py,但是一旦创建了矩阵,它们都不支持添加或删除行或列. ...
最新文章
- 线程池的介绍及简单实现
- Nginx安装、配置及使用总结
- c语言中0xde 这怎么用,为什么使用0x61c88647
- SAP gateway 里对 OData eq ne lt gt 操作的实现源代码
- JavaScript ECMA
- 浅谈 PHP 与手机 APP 开发(API 接口开发) 1
- sql中exists,not exists的用法 1
- Linux电源管理(1)_整体架构
- 推荐一款不错的杀毒软件,还在找卡巴激活码的网友不妨进来看看!
- ATSC/DVB/ISDB三大标准比较
- 物联网+安防在智慧社区建设中的发展与深度应用
- 定积分的基本性质1 线性性质
- 2022春招第一波投递时间预测,早看早知道
- u盘视频计算机里无法播放,电脑里复制了u盘里的视频文件,说无法播放,播放机不支持该文件类型,或不支持...
- R 语言 apply 系列函数
- SAP ALV异常:MOVE_TO_LIT_NOTALLOWED_NODATA
- 跨界营销新套路:立白和杜蕾斯这样“去污”
- 【算法导论-35】图算法JGraphT开源库介绍
- oracle dg 体系结构,ORACLE DG 详解(oracle dataguard)
- 软件测试——黑盒测试基本方法
热门文章
- python字符串函数reversed_Python reversed()函数
- java-php-net-python-校园后勤计算机毕业设计程序
- mp4视频格式转换器工具,万兴优转-多功能视音频处理软件
- OSG开发笔记(二十六):OSG漫游之上下楼梯
- linux磁盘管理(MBR和GPT、接口类型)
- oracle套嵌游标写法,PL/SQL Challenge 每日一题:2017-1-18 嵌套游标
- 20135327郭皓--读书笔记一
- 京东旗舰店商品详情数据采集接口代码对接教程
- 弘辽科技:淘宝有哪些违规关键词?如何检测?
- 怎样学习计算机动漫与游戏设计6,计算机动漫与游戏制作专业系列教材·动画设计软件应用:Flash CS6(第3版)...