zero3301 / pyhttpx Goto Github PK
View Code? Open in Web Editor NEWA network library based on socket development
License: MIT License
A network library based on socket development
License: MIT License
requests代码
resp = requests.post(api_url, data=param_body, headers=headers, proxies=self._proxies,
cookies=self.api_cookies,
cert=(self.api_client_crt_path, self.api_client_key_path),
verify=False)
pyhttpx如何实现,看了一圈源代码没找到证书相关的参数
测试网址:
https://ani.gamer.com.tw/animeVideo.php?sn=31724
PS:需要使用海外节点代理
浏览器可直接访问(即使禁用JS),保持 Header 一致后依然403,推测是 TLS 指纹校验,使用 pyhttpx 测试 403 ,大佬可以麻烦看一下吗
测试命令:
headers = {
'authority': 'ani.gamer.com.tw',
'pragma': 'no-cache',
'cache-control': 'no-cache',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
'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-dest': 'document',
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7'
}
sess = pyhttpx.HttpSession(browser_type='chrome')
response = sess.get('https://ani.gamer.com.tw/animeVideo.php?sn=31724', proxies={'https': '127.0.0.1:1080'}, headers=headers)
print(response.status_code)
`import pyhttpx
s = pyhttpx.HttpSession(browser_type='chrome',shuffle_proto=True,http2=True,ja3='xxxxxxxx')
headers = {
'Host': 'h5api.m.taobao.com',
'Cookie': 'cna=8Q3YGz07qjYCAXPuK+KDq6Bv; thw=cn; tfstk=d2opj-Do8B83tYGHEyLGa8TUILJMmDHUBXkfq7VhPfht_flnKYDS2VHqwWvy8k0TwfGTOuqnx3386Xsu-0HP28MSapPkLFDELurWiImJmvkE4URDihm8BJqzVIAcLWuYkulfPuXO31gk6vPs087Y0vWxn5I52LeLRSNU6gsSXJH3GO8ZmmlsKywaXwp9Ba7zRR8QUHAV.; l=fBP5rKHVN_JgVzHYBOfZrurza7-FSIRA_uPzaNbMi9fPOBCB56fCW1gzQxL6C3NRFs_MR3J9ORFeBeYBVQd-nxvtMUO4flMmn_sLn7C..; isg=BKys-3Jn5Dr7IfB2oImKQi9NfYjeZVAP9xxT_gbtuNf6EUwbLnUgn6KjNd-pgohn',
'user-agent': 'Mozilla/5.0 (Linux; Android 9; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.99 Mobile Safari/537.36',
'accept': '/',
'referer': 'https://h5.m.taobao.com/awp/core/detail.htm?id=663933227946&spm=a2141.7631671.content.15',
'accept-language': 'zh-CN,zh;q=0.9',
}
params = {
'jsv': '2.7.0',
'appKey': '12574478',
't': '1690970350688',
'sign': '60f14199bc935d0323469723695dcbbb',
'api': 'mtop.taobao.detail.getdetail',
'v': '6.0',
'ttid': '202012@taobao_h5_9.17.0',
'isSec': '0',
'ecode': '0',
'AntiFlood': 'true',
'AntiCreep': 'true',
'H5Request': 'true',
'type': 'jsonp',
'dataType': 'jsonp',
'safariGoLogin': 'true',
'mainDomain': 'taobao.com',
'subDomain': 'm',
'prefix': 'h5api',
'getJSONP': 'true',
'callback': 'mtopjsonp1',
'data': '{"id":"663933227946","spm":"a2141.7631671.content.15","detail_v":"3.5.0","exParams":"{\"id\":\"663933227946\",\"spm\":\"a2141.7631671.content.15\",\"appReqFrom\":\"detail\",\"container_type\":\"xdetail\",\"dinamic_v3\":\"true\",\"supportV7\":\"true\",\"ultron2\":\"true\",\"pageSource\":\"1\"}","itemNumId":"663933227946","pageCode":"miniAppDetail","from":"miniapp","openFrom":"pagedetail"}',
}
response = s.get(
'https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/',
params=params,
headers=headers
)
print(response.text)`
出现了以下错误:
File "C:\Python3.7\lib\site-packages\pyhttpx\session.py", line 532, in get
resp = self.request('GET', url, **kwargs)
File "C:\Python3.7\lib\site-packages\pyhttpx\session.py", line 204, in request
self.connpool, self.conn = self.get_conn(req, addr)
File "C:\Python3.7\lib\site-packages\pyhttpx\session.py", line 289, in get_conn
conn = connpool._get_conn()
File "C:\Python3.7\lib\site-packages\pyhttpx\session.py", line 95, in _get_conn
return conn or self._new_conn()
File "C:\Python3.7\lib\site-packages\pyhttpx\session.py", line 84, in _new_conn
proxies=self.req.proxies,)
File "C:\Python3.7\lib\site-packages\pyhttpx\layers\tls\pyssl.py", line 211, in connect
return self._tls_do_handshake13()
File "C:\Python3.7\lib\site-packages\pyhttpx\layers\tls\pyssl.py", line 400, in _tls_do_handshake13
raise TLSDecryptErrorExpetion('handshake failed!, server encrypt error')
pyhttpx.exception.TLSDecryptErrorExpetion: handshake failed!, server encrypt error
File "D:\Program Files\Python\python38\lib\site-packages\pyhttpx\session.py", line 255, in get
return self.request('GET', url, **kwargs)
File "D:\Program Files\Python\python38\lib\site-packages\pyhttpx\session.py", line 166, in request
raise TooManyRedirects('too many redirects')
pyhttpx.exception.TooManyRedirects: too many redirects
打印日志发现重试了20次都是一直在重试一个url
经常遇到需要下载文件,如果不支持stream模式,经常下载会卡住,请问可以添加支持吗?
看代理使用是分为两个参数,proxies填代理,proxy_auth填账号密码,但是用username:password@host:port不是更通用么?
AttributeError: 'NoneType' object has no attribute 'xpath'
title_page = response.xpath("//title/text()")
AttributeError: 'NoneType' object has no attribute 'xpath'
import pyhttpx
sess = pyhttpx.HttpSession(browser_type='chrome', http2=False)
debug_ADRUM_BTa = sess.get('https://ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/CCIEOnline')
print(debug_ADRUM_BTa.text)
like this,how can i do get the right response ,emm. think you
使用pyhttpx的 shuffle_extension_protocol参数,即随机extensions的部分,会被部分风控,而直接使用真实指纹不会,extensions部分的随机是否是有一定规则的?
还有观察到真实指纹的extensions的最后一位总是21,这个是不是会有影响??
771,4865-4866-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,51-10-0-23-11-16-5-13-17513-65281-27-43-35-45-18-21,29-23-24,0
这个库能支持Python的异步请求吗
I just have to change versions every time
抓取的链接cookie包含"Secure HttpOnly;"时,\site-packages\pyhttpx\session.py 的158行报错;
错误代码:k, v = set_cookie.split(';')[0].split('=', 1),即当set_cookie="Secure HttpOnly;"时ValueError: not enough values to unpack (expected 2, got 1)
你好,请问使用使用代理之后,修改JA3指纹信息是否还生效?
Very useful project. I'm waiting impatiently for the async version because I can't use it in my projects without it.
在使用中,运行一段时间,CPU会暴涨至100%
import asyncio
from pyhttpx import WebSocketClient
class WSS:
def __init__(self,url=None, headers=None, loop=None):
self.url = url
self.headers = headers
self.loop = loop
#self.ja3 = '771,19018-4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513,27242-29-23-24,0'
async def connect(self):
self.sock = await WebSocketClient(url=self.url, headers=self.headers, loop=self.loop,
).connect()
async def send(self):
while 1:
if self.sock.open:
data = 'pong'
print('send',data)
await self.sock.send(data, binary=True)
await asyncio.sleep(3)
async def recv(self):
while 1:
r = await self.sock.recv()
print('recv',r)
def main():
url = 'wss://io.dexscreener.com/dex/screener/pairs/h24/1?rankBy[key]=txns&rankBy[order]=desc&filters[liquidity][min]=100000&filters[marketCap][min]=200000&filters[txns][h24][min]=100'
headers = {
"Host": "io.dexscreener.com",
"Connection": "Upgrade",
"Pragma": "no-cache",
"Cache-Control": "no-cache",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
"Upgrade": "websocket",
"Origin": "https://dexscreener.com",
"Sec-WebSocket-Version": "13",
"Accept-Language": "zh-CN,zh;q=0.9",
"Sec-WebSocket-Key": "GhuX6WelpHAyKWaxQ4niIg==",
"Sec-WebSocket-Extensions": "permessage-deflate; client_max_window_bits"
}
loop = asyncio.get_event_loop()
print(f'connect: {url}')
wss = WSS(url, headers, loop)
loop.run_until_complete(wss.connect())
loop.create_task(wss.send())
loop.create_task(wss.recv())
loop.run_forever()
if __name__ == '__main__':
main()
类似这种格式无法解析
proxies = {'https': 'cc12345689:[email protected]:5714'}
似乎是用户名只能是数字
raise InvalidProxyURL(
requests.exceptions.InvalidProxyURL: Please check proxy URL. It is malformed and could be missing the host.
好强,^3^ ^3^
pyaiossl.py模块中,SSLContext类调用set_payload方法时,漏写了一些属性。最终会导致ExtKeyShare的实例化对象调用dump时,其中context.grease_group报错。
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
pyhttpx 2.10.12 requires cryptography==36.0.1, but you have cryptography 41.0.7 which is incompatible.
pyhttpx 2.10.12 requires pyOpenSSL==21.0.0, but you have pyopenssl 23.3.0 which is incompatible.
大佬,问一下,这个可以随机改变ja3指纹么,。我连续请求了几次看到ja3 和 ja3_hash都是一样的
请教一下pyhttpx如何修改http2指纹(akamai_fingerprint)?
怎么随机生成ja3库?
pyhttpx.HttpSession(ja3="xxxxx")
在某些请求,使用http2请求失败,但是用http2=false将会成功。
有一个请求,http2_send接口里面,最后一次frame[3]=6,head[4]=0,之后进入接收阻塞,直至超时。
因为read_ended只有在frame[3]=0,head[4]=1的情况才会结束。
因为没有细度http2的协议内容,这里想咨询下大佬,这些情况是异常的吗?还是Pyhttpx还没兼容这些内容
Enabling multithreading throws this error: pyhttpx.layers.tls.crypto.cipher_aead. AEADTagError: ,
How to solve it?
请问怎么获取请求后的url,。比如requests是 response.url,像有些网站是会被重定向
谢谢!
如题,https访问国外网站会有很大概率timeoout
还有一种报错
Traceback (most recent call last):
File "/Users/pledgebox/Projects/py_test/test_pyhttpx.py", line 24, in <module>
r = session.get("https://www.xxxxx.com/", headers=headers)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/pyhttpx/session.py", line 476, in get
resp = self.request('GET', url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/pyhttpx/session.py", line 185, in request
self.connpool, self.conn = self.get_conn(req, addr)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/pyhttpx/session.py", line 270, in get_conn
conn = connpool._get_conn()
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/pyhttpx/session.py", line 96, in _get_conn
return conn or self._new_conn()
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/pyhttpx/session.py", line 81, in _new_conn
conn.connect(
File "/usr/local/lib/python3.11/site-packages/pyhttpx/layers/tls/pyssl.py", line 193, in connect
return self._tls_do_handshake13()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/pyhttpx/layers/tls/pyssl.py", line 268, in _tls_do_handshake13
self.tls_cxt.make_secret(server_publickey)
File "/usr/local/lib/python3.11/site-packages/pyhttpx/layers/tls/tls_context.py", line 278, in make_secret
x25519.X25519PublicKey.from_public_bytes(server_publickey))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py", line 23, in from_public_bytes
return backend.x25519_load_public_bytes(data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1737, in x25519_load_public_bytes
raise ValueError("An X25519 public key is 32 bytes long")
ValueError: An X25519 public key is 32 bytes long
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.