Unexpected Error: hostname 'login.globo.com'

Issue #108 resolved
Former user created an issue

Desde ontem, 23 de Maio, o addon da Globo.com dá esse erro e não abre os canais da Rede Globo, como novelas e séries, variedades, jornalismo, etc. Já dei um update no Isengard, Helix, Jarvis, e também a versão 0.1.11 do Kodi Brasil mas nada funciona. Podem me orientar no que fazer? Obrigada.

Comments (14)

  1. Lucas Andrade
    • changed status to open

    É possível que tenham mudado algo na autenticação. Preciso do log de erro para reproduzir o problema.

  2. Thais P

    desinstalei a versão antiga e instalei a 0.1.32 mas continua dando a mesma mensagem de Unexpected Error: hostname 'login.globo.com'

  3. Bruno Briner

    Thais, Antes de usar o addon no Kodi voce tem que acessar a Globoplay via navegador web pelo seu computador (globoplay.globo.com) e criar um perfil.

  4. Thais P

    Bruno, eu tenho cadastro no Globo.com e o addon funcionava sem problemas. Segunda começaram a surgir os erros. Eu consigo abrir normalmente no Google Chrome. No addon da erro.

  5. Thais P

    Lucas, o log

    T:18446744071957138432 ERROR: EXCEPTION: Non-Existent Control 1 T:18446744072347127040 ERROR: Unable to activate the previous window T:18446744071953572096 NOTICE: [xbmcswift2] Request for "/globo/novelas-e-series" matches rules for function "list_shows" T:18446744072347127040 ERROR: CGUIMediaWindow::GetDirectory(plugin://plugin.video.globo.com/globo/novelas-e-series) failed T:18446744072347127040 ERROR: static bool XFILE::CDirectory::GetDirectory(const CURL&,CFileItemList&, const XFILE::CDirectory::CHints&, bool) - Error getting plugin://plugin.video.globo.com/globo/novelas-e-series

  6. bugmenot

    Lucas, no meu sistema, o erro é:

    ERROR: /storage/.kodi/addons/script.module.requests/lib/requests/packages/urllib3/util/ssl_.py:315: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwa rning.

    ERROR: /storage/.kodi/addons/script.module.requests/lib/requests/packages/urllib3/util/ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configu ring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

    ERROR: [plugin.video.globo.com] hostname 'login.globo.com' doesn't match 'flow.cadun.globo.com' ERROR: Playlist Player: skipping unplayable item: 0, path [plugin://plugin.video.globo.com/play/....]

    Ou seja, o requests do python está reclamando que, possivelmente pela falta do SNI, o hostname e o certificado não batem. => http://docs.python-requests.org/en/master/community/faq/

    1a opção seria desabilitar a verificação do match entre o certificado e o server (varrer o problema para debaixo do tapete :-) ) => http://stackoverflow.com/questions/22758031/how-to-disable-hostname-checking-in-requests-python

    2a. opção seria instalar os pacotes adicionais que o python 2.7.3 precisa para suportar os SNI: https://github.com/onjin/ejpiaj/issues/1

    Fazer upgrade do python instalado no kodi para 2.7.9+ seria mais "fácil"?

  7. Lucas Andrade

    @bugmenot o erro do SSL sempre existiu e não afeta o funcionamento. Agora o outro está relacionado a authenticação da globo.com. Não consegui reproduzir esse erro. Quais foram os passos?

    @tportella este erro eu identifiquei, mas ainda não consegui ver a origem. (meu HD pifou e estou tendo que montar o ambiente de desenvolvimento novamente)

  8. bugmenot

    Lucas, para mim esse erro começou ontem. Eu consigo listar os canais/programas mas quando eu tendo ver algum ele me lança essa exception.

  9. bugmenot

    *** update: com esse patch eu resolvi o problema: em termos simples, é um monkey patch para desabilitar a verificação no login https da globo, como na 1a sugestão do meu post anterior. Não é bonito mas funciona. A linha importante é a que mata a verificação do hostname => assert_hostname=False

    diff --git a/plugin.video.globo.com/resources/lib/backends.py b/plugin.video.globo.com/resources/lib/backends.py
    index 2a13642..f1fb3d2 100644
    --- a/plugin.video.globo.com/resources/lib/backends.py
    +++ b/plugin.video.globo.com/resources/lib/backends.py
    @@ -31,10 +31,13 @@ except:
     try:
         import cPickle as pickle
     except:
         import pickle
    
    +from requests.adapters import HTTPAdapter
    +from requests.packages.urllib3.poolmanager import PoolManager
    +   
     class Backends(object):
         ENDPOINT_URL = None
         SETT_PREFIX = None
    
         def __init__(self, plugin):
    @@ -88,10 +91,17 @@ class Backends(object):
         def notify(self, string_id):
             self.plugin.notify('[%s] %s' % (self.__class__.__name__,
                                             self.plugin.get_string(string_id)))
    
    
    +class HostNameIgnoringAdapter(HTTPAdapter):
    +    def init_poolmanager(self, connections, maxsize, block=False):
    +        self.poolmanager = PoolManager(num_pools=connections,
    +                                       maxsize=maxsize,
    +                                       block=block,
    +                                       assert_hostname=False)
    +                                      
     class globo(Backends):
         ENDPOINT_URL = 'https://login.globo.com/api/authentication'
         SETT_PREFIX = 'globo'
    
         def _authenticate(self, provider_id):
    @@ -100,11 +110,13 @@ class globo(Backends):
                     'email': self.username,
                     'password': self.password,
                     'serviceId': 465
                 }
             }
    -        response = requests.post(self.ENDPOINT_URL,
    +        s = requests.Session();
    +       s.mount('https://', HostNameIgnoringAdapter())
    +       response = s.post(self.ENDPOINT_URL,
                                      data=json.dumps(payload),
                                      headers={ 'content-type': 'application/json' })
             return { 'GLBID': response.cookies.get('GLBID') }
    
  10. Thais P

    Eu estou assistindo pelo Google chrome. Quando seu sistema estiver recuperado e puder dar uma olhada no problema, agradeço.

    Como não estou na região de acesso aos canais ao vivo, o único que funciona pra é Channels, Rede Globo, Novelas e Séries/Jornalismo/Variedades

    O erro aparece no momento que eu clico pra fazer a visualização no capítulo específico da novela do dia, do dia específico do jornal, dia específico do show de variedades. Começou na segunda passada. Até então, estava usando sem problemas.

  11. Log in to comment