Giter Club home page Giter Club logo

pyhttpx's People

Contributors

mofei77 avatar zero3301 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

pyhttpx's Issues

如何带上客户端证书进行请求

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如何实现,看了一圈源代码没找到证书相关的参数

无法通过CloudFlare

测试网址:

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)

timeout不生效

单线程挂代理请求的时候,timeout设置的10s,但是测试过程中会发现,程序拿到代理,发送请求以后就卡死,拿不到响应
image

添加自定义ja3之后出现pyhttpx.exception.TLSDecryptErrorExpetion: handshake failed!, server encrypt error

`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模式的支持

经常遇到需要下载文件,如果不支持stream模式,经常下载会卡住,请问可以添加支持吗?

关于ja3指纹被风控

使用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

pyhttpx Bug

抓取的链接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)

Cool project bro

Very useful project. I'm waiting impatiently for the async version because I can't use it in my projects without it.

websocket 示例代码无法跑通

卡死在这里:
image

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.

使用时发现一个bug

pyaiossl.py模块中,SSLContext类调用set_payload方法时,漏写了一些属性。最终会导致ExtKeyShare的实例化对象调用dump时,其中context.grease_group报错。

随机改变ja3指纹

大佬,问一下,这个可以随机改变ja3指纹么,。我连续请求了几次看到ja3 和 ja3_hash都是一样的

http2阻塞,设置false就没问题。

在某些请求,使用http2请求失败,但是用http2=false将会成功。
有一个请求,http2_send接口里面,最后一次frame[3]=6,head[4]=0,之后进入接收阻塞,直至超时。
因为read_ended只有在frame[3]=0,head[4]=1的情况才会结束。

因为没有细度http2的协议内容,这里想咨询下大佬,这些情况是异常的吗?还是Pyhttpx还没兼容这些内容

Multithreading issues

Enabling multithreading throws this error: pyhttpx.layers.tls.crypto.cipher_aead. AEADTagError: ,
How to solve it?

获取请求后的url

请问怎么获取请求后的url,。比如requests是 response.url,像有些网站是会被重定向

https有一定概率会timeout,国内网站没遇到,但是国外网站会有很大概率直接timeout

如题,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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.