大概过tls的思路
1.最主要的 设置requests tls指纹
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS
2.看发tls带了啥,一般有 http1.1和User-Agent 有的要弄上这两个 有的没检测这
requests发的tls默认写http1.0 要改源码为1.1
教程:
先用fd抓包,看每次发请求前都有一个Tunnel,甚至还有一把小锁的图标
点进来看 写的version 3.3(TLS/1.2) 这个就是了
先搞TLS指纹吧
图中的Ciphers就是指纹key 但是这个是假的
用小鲨鱼 wireshark抓包
点Client Hello然后Cipher Suites里面的Cipher Suite 显示有16个
第一个去掉,复制后面15个就行了 复制先备用
打开官方的密码表网址:https://www.openssl.org/docs/man1.1.1/man1/openssl-ciphers.html
循环搜索你复制的N个 Cipher Suite 然后再把右边的value粘贴下来 如图
只要右边的 最后以value:value:... 拼凑成一串
再在python里
import requests.packages.urllib3.util.ssl_
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = "TLS_AES_128_GCM_SHA256:xxx:xxx:xxx"
#xxx粘贴你自己弄的那些
第一步就完事了 可以尝试下能跑吗 不能就继续
第二步
右边的CONNECT 网址 HTTP1.1 和Headers{Connecton User-Agent} 都弄上
位置在源码 python/Lib/http/client.py
//可以在python里直接写这个
import http.client
http.client.HTTPConnection
//然后ctrl+鼠标左键单击HTTPConnection 跳转到源码位置
//第886行的这个函数->_tunnel(self)
//改成下面这样 headres按需扩展
def _tunnel(self):
connect_str = "CONNECT %s:%d HTTP/1.1\r\n" % (self._tunnel_host,
self._tunnel_port)
connect_bytes = connect_str.encode("ascii")
self.send(connect_bytes)
self._tunnel_headers={
"Connection":"keep-alive",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
}
for header, value in self._tunnel_headers.items():
header_str = "%s: %s\r\n" % (header, value)
header_bytes = header_str.encode("latin-1")
self.send(header_bytes)
self.send(b'\r\n')
改完了记得把import源码那个删除掉
可以了,不写了,该干饭了
吊啊