Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Authentication failure #74

Open
gumalobato opened this issue Feb 23, 2021 · 13 comments
Open

Authentication failure #74

gumalobato opened this issue Feb 23, 2021 · 13 comments

Comments

@gumalobato
Copy link

Aparentemente desde hoje começou a ocorrer erro de autenticação ao tentar logar via api:

api = cartolafc.Api(email=xxxxxxxx@xxxxx.xxx', password='xxxxxxxxxxx')

File "(...)\python-cartolafc-master\cartolafc\api.py", line 72, in __init__
  self.set_credentials(email, password)
File "(...)\python-cartolafc-master\cartolafc\api.py", line 104, in set_credentials
  body = response.json()
File "(...)\lib\site-packages\requests\models.py", line 900, in json
  return complexjson.loads(self.text, **kwargs)
File "(...)\appdata\local\programs\python\python38-32\lib\json\__init__.py", line 357, in loads
  return _default_decoder.decode(s)
File (...)\appdata\local\programs\python\python38-32\lib\json\decoder.py", line 337, in decode
  obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "(...)\appdata\local\programs\python\python38-32\lib\json\decoder.py", line 355, in raw_decode
  raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
@aebrag
Copy link

aebrag commented Mar 1, 2021

Pessoal, estou tendo o mesmo problema na autenticação, alguém conseguiu descobrir o que está acontecendo.

@gumalobato
Copy link
Author

ainda não peguei novamente pra estudar o problema com o final da temporada. Porém, o que havia visto é que o problema tá relacionado ao captcha.

@aebrag
Copy link

aebrag commented Mar 2, 2021

Faz sentido, vou tentar dar uma olhada também por esse caminho, estou precisando resolver esse problema para fazer o fechamento da minha liga. Se descobrir algo me avise, por favor.

abs e obrigado até aqui.

@gumalobato
Copy link
Author

Boa tarde @aebrag conseguiu algo relacionado a autenticação do rCaptcha? Tentei algumas formas aqui e ainda n foi possível. Se alguém tiver um caminho bom a seguir agradeço.

@aebrag
Copy link

aebrag commented May 5, 2021

Ei @gumalobato, também não consegui, todas as minhas tentativas deram errado. Achei um fórum que a turma conseguiu resolver mas usando C#, porém preciso em Python e não consegui replicar. A turma fala em pegar o "GLBID" dos cookies e enviar junto dos request pra autenticar, mas não sei fazer isso.
Dá uma no fim desse link aqui: https://gitter.im/cartrolandofc/dev

@gumalobato
Copy link
Author

@aebrag Acabou que coincidentemente eu vi lá também sem ter lido seu comentário, mas seguindo as dicas desse fórum consegui puxar as informações que precisava. Claro, ainda está "manual" mas já é algo que pra mim resolve, já que meu script é somente para puxar as informações de pontuação e patrimônio para controle interno de 2 ligas que administro.

Para conseguir puxar essas informações eu:
1 - loguei no browser mesmo com meu login do cartola
2 - Peguei o GLBID -> Para isso pode ser de várias formas, a mais fácil é no proprio link de informações do teu user: https://login.globo.com/api/user. Outra forma que peguei é no arquivo sqlite de cookies do navegador (uso o firefox), fica em %APPDATA%/Mozilla/Firefox/Profiles/ ... /cookies (caso utilize Windows). Pra essa última pode usar DB Browser Sqlite (mais fácil) ou até mesmo o notepad.
3 - Insiro isso no meu script, a propria biblioteca aqui já esperava na chamada da Api() em self._glbid = None, substitui ela pelo cookie que peguei

    def __init__(self, email=None, password=None, attempts=1, redis_url=None, redis_timeout=10):
        """ Instancia um novo objeto de cartolafc.Api.

        Args:
            email (str): O e-mail da sua conta no CartolaFC. Requerido se o password for informado.
            password (str): A senha da sua conta no CartolaFC. Requerido se o email for informado.
            attempts (int): Quantidade de tentativas que serão efetuadas se os servidores estiverem sobrecarregados.
            redis_url (str): URL para conectar ao servidor Redis, exemplo: redis://user:password@localhost:6379/2.
            redis_timeout (int): O timeout padrão (em segundos).

        Raises:
            cartolafc.CartolaFCError: Se as credenciais forem inválidas ou se apenas um dos
            dois argumentos (email e password) for informado.
        """

        self._api_url = 'https://api.cartolafc.globo.com'
        self._auth_url = 'https://login.globo.com/api/authentication'
        self._email = email
        self._password = password
        self._glb_id = '<insira aqui o cookie>' # <<<<<<<<<<<<<<<--------------------modificação
        #self._glb_id = None
        self._attempts = attempts if isinstance(attempts, int) and attempts > 0 else 1
        self._redis_url = redis_url
        self._redis_timeout = redis_timeout if isinstance(redis_timeout, int) and redis_timeout > 0 else 10
        self._redis = None`

PS.: Dessa forma tá hardcode e claro, só vai funcionar enquanto esse cookie tiver vivo, se quiser melhorar pode chamar a autenticação da api passando o parâmetro glbid no construtor e setando ele na variável.

Feito isso, na classe principal ao inves de chamar:

api = Api(email=xxxxxx@xxxxx.com, password=xxxxxxx)

chamo só:

api = Api()

OU, quando alterar a chamada do construtor chamar:

api = Api(glbid='<cookie>'

Aí é só puxar a info q quiser tipo:

api.liga('nome_da_liga')
print(liga)

@aebrag
Copy link

aebrag commented May 10, 2021

Valeu @gumalobato vou fazer um teste aqui e aviso se deu certo. Se tiver alguma dificuldade faço contato contigo.

@aebrag
Copy link

aebrag commented May 13, 2021

@gumalobato, pra mim continua dando CaptchaBlank, como você resolveu na função set_credentials()? Tô colando ai duas formas diferentes que tentei, mas sem sucesso.

image

@gumalobato
Copy link
Author

@aebrag Alterei somente a chamada a api, adicionando o atributo glb_id:

image

segue um exemplo:

image

@aebrag
Copy link

aebrag commented May 13, 2021

@gumalobato e onde você passa o e-mail e senha? Não precisa? Entendi que o glb_id que pegamos do cookie, depois de logado, é só o captcha. Fiz a alteração no código exatamente como seu exemplo acima, porém quando faço a chamada ganho um erro de autenticação.

image

Agora se faço a chamada passando o e-mail, senha e o glb_id, ganho um erro de montagem do JSON na chamada do request.json().

image

image

@gumalobato
Copy link
Author

@aebrag Esse processo com o cookie é meio q uma "gambiarra" somente para conseguir logar através de um cookie de um login prévio da mesma maquina. Não pode excluir o cookie, ou se excluir vai ter que atualizar logando manualmente no site antes, pegando o glbd_id e passando na chamada da autenticação.

Se fizer dessa forma, não precisa passar o login e senha.

Mostra como fizeste o teu def __init__ da Api

@aebrag
Copy link

aebrag commented Jun 1, 2021

@gumalobato, me desculpe pela falta de atualização. O código está funcionando perfeitamente. Fiz conforme sua sugestão. Valeu!

@cknakayama
Copy link

Estou usando da forma que o amigo citou acima, pegando manualmente o glb_id do cookie e colocando manualmente no código e venho utilizando dessa forma desde então, mas alguem conseguiu alguam outra forma "sem gambiarra" pra fazer?

Alguns aplicativos que utilizo o cartola, ao fazer o login ele abre a janela de login da globo para o usuario se logar e depois automaticamente volta para o app já logado. Alguem saberia me explicar como faço isso?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants