Я установил текущий мастер с помощью pip install zipfile в недавней среде python3 conda.
base_url = ' http://............127.0.0.1 :8082'
запрос.получить(базовый_url)
сбои
и заканчивается UnidodeError
python3.6/encodings/idna.py",
строка 165, в кодировке
поднять UnicodeError("метка пуста или слишком длинна")
UnicodeError: метка пуста или слишком длинна
Может быть, вы можете поймать это?
Для потомков полная трассировка такова:
>>> 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)
Я не думаю, что мы можем многое с этим сделать. Ошибка исходит из стандартной библиотеки (в частности, в функции urllib proxy_bypass
). Он присутствует только в Python 3, который считает необходимым вызывать socket.gethostbyname
. Эта функция будет автоматически кодировать в IDNA имя хоста в формате Unicode даже в подобных ситуациях, когда это просто не нужно, и кодировщик IDNA корректно отклоняет это.
Единственный способ исправить это — перейти к гораздо более разумной реализации обработки URL-адресов, которая нормализует URL-адреса в той или иной форме. Лучшим кандидатом является гиперссылка, но гиперссылка также не работает по той же причине (она пытается закодировать IDNA и терпит неудачу).
Это означает, что в лучшем случае мы могли бы исправить это, расширив гиперссылку нормализатором узла URL, а затем обработать ее. Однако спецификация URL-адресов WHATWG также запрещает эту форму URL-адреса. Если это так, я не уверен, почему, поскольку Chrome нормализует его (хотя Safari - нет).
Учитывая объем работы, необходимой для этого, я не вижу причин терпеть это. URL-адрес просто эффектно далек от всего, что можно разумно ожидать, поэтому я склонен просто закрыть это, поскольку это не исправит.
Я сталкиваюсь с этим для URL-адреса формата:
https://key:[email protected]/path/file.json
и длиной 132 символа.
@johnpaulhayes Это все еще не проблема с библиотекой запросов, но, поскольку я тоже сталкиваюсь с ней, я думаю, что выпущу обновление.
Похоже, это не вся длина URL-адреса, а только его часть. Кодировщик idna, кажется, ломается на URL-адресах, когда первая часть имени хоста превышает 64 символа. По какой-то причине он также включает в себя ключ и секрет. Поэтому либо избегайте python3, либо избегайте длинных строк " key:secret@example " (вероятно, избегая длинных ключей API), пока не будут исправлены основные функции. Вчера я отправил сообщение об ошибке в трекер python.
Для интересующихся вопросом на стороне python
https://bugs.python.org/issue32958
Самый полезный комментарий
Для интересующихся вопросом на стороне python
https://bugs.python.org/issue32958