cleitonleonel/pyquotex

Retornando Handshake status 403 Forbidden

Closed this issue · 8 comments

Handshake status 403 Forbidden -+-+- {'date': 'Mon, 15 Jul 2024 06:00:27 GMT', 'content-type': 'text/html; charset=UTF-8', 'content-length': '17937', 'connection': 'close', 'accept-ch': 'Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA', 'critical-ch': 'Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA', 'cross-origin-embedder-policy': 'require-corp', 'cross-origin-opener-policy': 'same-origin', 'cross-origin-resource-policy': 'same-origin', 'origin-agent-cluster': '?1', 'permissions-policy': 'accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()', 'referrer-policy': 'same-origin', 'x-content-options': 'nosniff', 'x-frame-options': 'SAMEORIGIN', 'cf-mitigated': 'challenge', 'cf-chl-out': 'h+rc3whEW9n477yWcYDOpmyO2+L62HuX4oMRKAIszeIKaICrvJX7JJiTpoUJEA1yfaHOh8frA/2ykxG+pCczWUBiA7AA3YzF8X7Zu3qFwK8zWBUH02mGnOZfc15+kQxh5m1Rui9KeahmTS+98YRkBw==$Dvq9DHSLwE8c4dURymnDaw==', 'cache-control': 'private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'expires': 'Thu, 01 Jan 1970 00:00:01 GMT', 'server': 'cloudflare', 'cf-ray': '8a378842d8c5a40b-GRU'} -+-+- b'<title>Just a moment...</title><style>*{box-sizing:border-box;margin:0;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%;color:#313131}button,html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}@media (prefers-color-scheme:dark){body{background-color:#222;color:#d9d9d9}body a{color:#fff}body a:hover{color:#ee730a;text-decoration:underline}body .lds-ring div{border-color:#999 transparent transparent}body .font-red{color:#b20f03}body .pow-button{background-color:#4693ff;color:#1d1d1d}body #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9'
Connected: False

Versão Python: Python 3.12.4
Versão mais recente da OpenSSL

tive que colocar print na client.py pra identificar o erro 403

pra identificar o erro 403

Não precisava de um print lá, bastava habilitar os logs.

client.debug_ws_enable = True

A respeito do problema, se refere a bloqueio da cloudflare.
SSl da quotex se não me engano é TLSv1.3 e por algum motivo isso está causando erros na hora de conectar ao websocket, na versão privada consegui contornar isso criando um manipulador de ssl, para tratar o contexto ssl antes de me conectar ao websocket.

consegue disponibilizar para nós? Somente esse manipulador de ssl

consegue disponibilizar para nós? Somente esse manipulador de ssl

Infelizmente não,isso deverá ficar somente na versão privada, por questões de segurança mesmo.
Tenho a impressão que tudo que faço por aqui é visto por alguém da quotex e num instante é bloqueado.
Posso estar enganado, mas é a impressão que tenho.

também tenho uma api da quotex, me chama no telegram http://t.me/DarkBotSuporte, vou te fornecer ela pra você implementar algumas coisas na sua caso precise

também tenho uma api da quotex, me chama no telegram http://t.me/DarkBotSuporte, vou te fornecer ela pra você implementar algumas coisas na sua caso precise

Certo, vou chamar lá.

Hola, ¡Excelente proyecto! Me ha sido de gran utilidad.

Tuve el mismo problema y encontré una solución sencilla. Al comentar las líneas 302 y 303 del método start_websocket() en el módulo api.py, y agregar una nueva línea, pude resolver el inconveniente.

Líneas 302 y 303

if platform.system() == "Linux":
    payload["sslopt"]["ssl_version"] = ssl.PROTOCOL_TLSv1_2

Luego, tomé la sentencia contenida en la condicional de la línea 302 y la copié en la 304 para que se ejecute siempre.

# if platform.system() == "Linux":
#    payload["sslopt"]["ssl_version"] = ssl.PROTOCOL_TLSv1_2
payload["sslopt"]["ssl_version"] = ssl.PROTOCOL_TLSv1_2

De esta manera, la configuración de la versión SSL se aplica siempre, independientemente del sistema operativo.

Estoy utilizando esta biblioteca en un proyecto personal que ejecuto tanto en Linux como en Windows.

Olá, excelente projeto! Eu fui de grande utilidade.

Encontre o mesmo problema e encontre uma solução simples. Ao comentar as linhas 302 e 303 do método start_websocket() no módulo api.py, e adicionar uma nova linha, pude resolver o inconveniente.

Linhas 302 e 303

if platform.system() == "Linux":
    payload["sslopt"]["ssl_version"] = ssl.PROTOCOL_TLSv1_2

Depois, tomei a sentença contida na condicional da linha 302 e a copiada na 304 para que seja executada sempre.

# if platform.system() == "Linux":
#    payload["sslopt"]["ssl_version"] = ssl.PROTOCOL_TLSv1_2
payload["sslopt"]["ssl_version"] = ssl.PROTOCOL_TLSv1_2

Desta forma, a configuração da versão SSL será aplicada sempre, independentemente do sistema operacional.

Estou usando esta biblioteca em um projeto pessoal que é executado tanto no Linux quanto no Windows.

Gracias por eso.