Eu instalei o mestre atual por pip install zipfile em um ambiente recente python3 conda
base_url = ' http://............127.0.0.1 :8082'
request.get(base_url)
trava
e termina com um UnidodeError
python3.6/encodings/idna.py",
linha 165, em codificação
raise UnicodeError("rótulo vazio ou muito longo")
UnicodeError: rótulo vazio ou muito longo
Pode ser que você pode pegar isso?
Para a posteridade, o traceback completo é este:
>>> requests.get(base_url)
Traceback (most recent call last):
File "/Users/cory/.pyenv/versions/3.6.0/lib/python3.6/encodings/idna.py", line 165, in encode
raise UnicodeError("label empty or too long")
UnicodeError: label empty or too long
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/cory/Documents/Python/requests_org/requests/requests/api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "/Users/cory/Documents/Python/requests_org/requests/requests/api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/cory/Documents/Python/requests_org/requests/requests/sessions.py", line 493, in request
prep.url, proxies, stream, verify, cert
File "/Users/cory/Documents/Python/requests_org/requests/requests/sessions.py", line 666, in merge_environment_settings
env_proxies = get_environ_proxies(url, no_proxy=no_proxy)
File "/Users/cory/Documents/Python/requests_org/requests/requests/utils.py", line 692, in get_environ_proxies
if should_bypass_proxies(url, no_proxy=no_proxy):
File "/Users/cory/Documents/Python/requests_org/requests/requests/utils.py", line 676, in should_bypass_proxies
bypass = proxy_bypass(netloc)
File "/Users/cory/.pyenv/versions/3.6.0/lib/python3.6/urllib/request.py", line 2616, in proxy_bypass
return proxy_bypass_macosx_sysconf(host)
File "/Users/cory/.pyenv/versions/3.6.0/lib/python3.6/urllib/request.py", line 2593, in proxy_bypass_macosx_sysconf
return _proxy_bypass_macosx_sysconf(host, proxy_settings)
File "/Users/cory/.pyenv/versions/3.6.0/lib/python3.6/urllib/request.py", line 2566, in _proxy_bypass_macosx_sysconf
hostIP = socket.gethostbyname(hostonly)
UnicodeError: encoding with 'idna' codec failed (UnicodeError: label empty or too long)
Acho que não há muito que possamos fazer sobre isso. O erro está saindo da biblioteca padrão (especificamente, na função urllib proxy_bypass
). Está presente apenas no Python 3, que sente a necessidade de chamar socket.gethostbyname
. Essa função codificará automaticamente um nome de host unicode por IDNA, mesmo em situações como essa em que simplesmente não é necessário, e seu codificador de IDNA rejeita isso corretamente.
A única maneira de corrigir isso é mudando para uma implementação de manipulação de URL muito mais inteligente que normaliza as URLs de alguma forma. O melhor candidato é o hiperlink, mas o hiperlink também faz isso por um motivo semelhante (ele tenta codificar o IDNA e falha).
Isso significa que, na melhor das hipóteses , poderíamos corrigir isso estendendo o hiperlink com um normalizador de host de URL e depois manipulá-lo. No entanto, a especificação de URL WHATWG também parece proibir essa forma de URL. Se isso acontecer, não tenho certeza do motivo, pois o Chrome o normaliza (embora o Safari não).
Dada a quantidade de trabalho necessária para fazer isso, não vejo nenhuma razão para tolerá-lo. O URL está espetacularmente longe de qualquer coisa que possa razoavelmente esperar que funcione, então estou inclinado a fechar isso porque não vai corrigir.
Estou encontrando isso para um URL do formato:
https://key:[email protected]/path/file.json
e comprimento de 132 caracteres.
@johnpaulhayes Isso ainda não é um problema com a biblioteca de solicitações, mas como também estou me deparando com ela, acho que vou lançar uma atualização.
Não é o comprimento total do URL que parece fazer isso, apenas uma seção dele. O codificador de idna parece quebrar em urls quando a primeira parte do nome do host tem mais de 64 caracteres. Por qualquer motivo, está incluindo a chave e o segredo lá também. Portanto, evite python3 ou evite strings " key:secret@example " longas (provavelmente evitando chaves de API longas) até que as funções subjacentes sejam corrigidas. Enviei um bug para o rastreador python ontem.
Para aqueles interessados no problema no lado do python
https://bugs.python.org/issue32958
Comentários muito úteis
Para aqueles interessados no problema no lado do python
https://bugs.python.org/issue32958