Ich habe die aktuelle Master-by-Pip-Installations-Zip-Datei in einer aktuellen Python3-Conda-Umgebung installiert
base_url = ' http://............127.0.0.1 :8082'
request.get(base_url)
stürzt ab
und endet mit einem UnidodeError
python3.6/encodings/idna.py",
Zeile 165, verschlüsselt
raise UnicodeError("Etikett leer oder zu lang")
UnicodeError: Bezeichnung leer oder zu lang
Vielleicht kannst du das fangen?
Für die Nachwelt lautet die vollständige Rückverfolgung:
>>> 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)
Ich glaube nicht, dass wir da viel machen können. Der Fehler kommt aus der Standardbibliothek (insbesondere in der Funktion urllib proxy_bypass
). Es ist nur in Python 3 vorhanden, das das Bedürfnis verspürt, socket.gethostbyname
aufzurufen. Diese Funktion wird einen Unicode-Hostnamen automatisch IDNA-codieren, selbst in Situationen wie dieser, in denen dies einfach nicht erforderlich ist, und ihr IDNA-Encoder lehnt dies korrekt ab.
Die einzige Möglichkeit, dies zu beheben, besteht darin, zu einer viel intelligenteren URL-Verarbeitungsimplementierung zu wechseln, die URLs in irgendeiner Form normalisiert. Der beste Kandidat ist Hyperlink, aber Hyperlink verbietet sich aus einem ähnlichen Grund (es versucht, IDNA zu kodieren und schlägt fehl).
Dies bedeutet, dass wir dies bestenfalls beheben könnten, indem wir den Hyperlink mit einem URL-Host-Normalisierer erweitern und dann damit umgehen. Die WHATWG-URL-Spezifikation scheint jedoch auch diese Form von URL zu verbieten. Wenn dies der Fall ist, bin ich mir nicht sicher, warum, da Chrome es normalisiert (obwohl Safari dies nicht tut).
Angesichts des Aufwands, der dafür erforderlich ist, sehe ich keinen Grund, dies zu tolerieren. Die URL ist einfach spektakulär weit weg von allem, was man vernünftigerweise erwarten kann, dass es funktioniert, also neige ich dazu, dies einfach als "Will't Fix" zu schließen.
Ich stoße auf dies für eine URL des Formats:
https://key:[email protected]/path/file.json
und Länge von 132 Zeichen.
@johnpaulhayes Das ist immer noch kein Problem mit der Anforderungsbibliothek, aber da ich auch darauf stoße, denke ich, dass ich ein Update löschen werde.
Es scheint nicht die Gesamtlänge der URL zu sein, sondern nur ein Teil davon. Der idna-Encoder scheint bei URLs zu brechen, wenn der erste Teil des Hostnamens länger als 64 Zeichen ist. Aus irgendeinem Grund enthält es auch den Schlüssel und das Geheimnis. Vermeiden Sie also entweder python3 oder vermeiden Sie lange " key:secret@example " -Strings (wahrscheinlich durch Vermeiden langer API-Schlüssel), bis die zugrunde liegenden Funktionen behoben sind. Ich habe gestern einen Fehler dafür an den Python-Tracker gemeldet.
Für diejenigen, die sich für das Problem auf der Python-Seite interessieren
https://bugs.python.org/issue32958
Hilfreichster Kommentar
Für diejenigen, die sich für das Problem auf der Python-Seite interessieren
https://bugs.python.org/issue32958