andreroggeri / pynubank

Acesse seus extratos do Nubank pelo Python
MIT License
1.19k stars 180 forks source link

Inclusão de mais propriedades dos headers da requisição #19

Closed leogregianin closed 3 years ago

leogregianin commented 6 years ago

Para melhorar o acesso e diminuir o bloqueio da API do Nubank com o retorno Too many requests (429) poderia incluir mais propriedades dos headers. Os headers abaixo são do acesso pelo navegador permanecendo somente o user-agent.

    headers = {
        'Content-Type': 'application/json;charset=UTF-8',
        'X-Correlation-Id': 'WEB-APP.pewW9',
        'User-Agent': 'pynubank Client - https://github.com/andreroggeri/pynubank',
        'Accept': 'application/json, text/plain, */*',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7',
        'Connection': 'keep-alive',
        'DNT': '1',
        'Host': 'prod-s0-webapp-proxy.nubank.com.br',
        'Origin': 'https://app.nubank.com.br',
        'Referer': 'https://app.nubank.com.br/'
    }
andreroggeri commented 6 years ago

Fala @leogregianin você também teve problema com too many requests ? Acabou ficando 3 dias sem conseguir acessar sua conta ? 😢

Você chegou a ter alguma melhora incluindo esses headers ? Vou tentar questionar eles pra ver se tem mais alguma informação sobre esse bloqueio que estamos tendo. Talvez seja a velocidade entre as requisições.

leogregianin commented 6 years ago

Tudo bem @andreroggeri. Eu fiquei um tempo bloqueado por causa das muitas requisições. 😢 Mas tive uma melhora significativa usando os headers abaixo, talvez por ser os mesmos headers gerados pelo próprio site deles.

headers = {
        'Content-Type': 'application/json;charset=UTF-8',
        'X-Correlation-Id': 'WEB-APP.pewW9',
        'User-Agent': 'Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
        'Accept': 'application/json, text/plain, */*',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7',
        'Connection': 'keep-alive',
        'DNT': '1',
        'Host': 'prod-s0-webapp-proxy.nubank.com.br',
        'Origin': 'https://app.nubank.com.br',
        'Referer': 'https://app.nubank.com.br/'
Srocchi commented 6 years ago

Estou me aventurando além do meu conhecimento falando sobre requests.post, mas aqui vai:

Fui bloqueado por 72 horas umas 80 horas atrás, tendo tomado bastante cuidado com o número de requests e a frequência deles, o que me faz achar que o bloqueio é relacionado a abrir nova sessão (método authenticate()) sem ter fechado a anterior. O servidor do NuBank provavelmente ainda está esperando contato em um session_id e recebe pedido pra abrir uma nova sessão para o mesmo device_id. Possivelmente algo relacionado a isso

Estive analisando as comunicações num arquivo HAR, mas estou além do meu conhecimento. Alguém pode investigar mais?

andreroggeri commented 6 years ago

@Sroccchi

Duas dúvidas:

Srocchi commented 6 years ago

Quando fui bloqueado eu tinha feito no máximo 6 requisições, espalhadas em 3 logins, e mais ou menos meia hora ( authenticate() com certeza não foi chamado duas vezes em um intervalo menor que 5 minutos). Estava fazendo alterações nos métodos para separar os que fazem requisições, para poder chamar qualquer método livremente, e apenas fazer novas requisições ao servidor chamando uma função update() ou similar.

othecos commented 6 years ago

Galera, acho que descobri o porque ocorre o bloqueio, fiz o teste aqui e agora esta funcionando. Eu percebi que o bloqueio acontecia porque eu estava tentando logar varias vezes na mesma sessão, com o mesmo IP, entao acho que o Nubank entendia que estava sendo atacado. Para resolver isso é simples, é só logar apenas uma vez por sessao. Uma vez logado, voce pode fazer as outras requisições normalmente!