Saya menginstal master saat ini dengan pip install zipfile di lingkungan conda python3 baru-baru ini
base_url = ' http://............127.0.0.1 :8082'
request.get(base_url)
crash
dan diakhiri dengan UnidodeError
python3.6/encodings/idna.py",
baris 165, dalam penyandian
menaikkan UnicodeError("label kosong atau terlalu panjang")
UnicodeError: label kosong atau terlalu panjang
Mungkin Anda bisa menangkap ini?
Untuk anak cucu, traceback lengkapnya adalah ini:
>>> 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)
Saya tidak berpikir ada banyak yang bisa kita lakukan tentang ini. Kesalahan keluar dari pustaka standar (khususnya, dalam fungsi urllib proxy_bypass
). Itu hanya ada di Python 3, yang merasa perlu untuk memanggil socket.gethostbyname
. Fungsi ini akan secara otomatis mengkodekan IDNA nama host unicode, bahkan dalam situasi seperti ini di mana itu tidak diperlukan, dan encoder IDNA-nya dengan benar menolak ini.
Satu-satunya cara kami dapat memperbaikinya adalah dengan pindah ke implementasi penanganan URL yang jauh lebih cerdas yang menormalkan URL dalam beberapa bentuk. Kandidat terbaik adalah hyperlink, tetapi hyperlink juga melarang ini karena alasan yang sama (ia mencoba mengkodekan IDNA dan gagal).
Ini berarti bahwa yang terbaik kami dapat memperbaikinya dengan memperluas hyperlink dengan normalizer host URL dan kemudian menanganinya. Namun, spesifikasi URL WHATWG juga tampaknya melarang bentuk URL ini. Jika ya, saya tidak yakin mengapa, karena Chrome menormalkannya (meskipun Safari tidak).
Mengingat jumlah pekerjaan yang diperlukan untuk melakukan ini, saya tidak melihat alasan untuk mentolerirnya. URL sangat jauh dari apa pun yang secara wajar diharapkan berfungsi, jadi saya cenderung menutup ini sebagai tidak akan diperbaiki.
Saya menemukan ini untuk URL dengan format:
https://key:[email protected]/path/file.json
dan panjang 132 karakter.
@johnpaulhayes Itu masih bukan masalah dengan perpustakaan permintaan, tetapi karena saya juga mengalaminya, saya pikir saya akan menjatuhkan pembaruan.
Bukan panjang total url yang tampaknya melakukannya, hanya sebagian saja. Encoder idna tampaknya rusak pada url ketika bagian pertama dari nama host lebih dari 64 karakter. Untuk alasan apa pun, itu termasuk kunci dan rahasia di sana juga. Jadi hindari python3 atau hindari string " key:secret@example " yang panjang (kemungkinan dengan menghindari kunci api yang panjang) hingga fungsi yang mendasarinya diperbaiki. Saya mengirimkan bug untuk itu ke pelacak python kemarin.
Bagi mereka yang tertarik dengan masalah di sisi python
https://bugs.python.org/issue32958
Komentar yang paling membantu
Bagi mereka yang tertarik dengan masalah di sisi python
https://bugs.python.org/issue32958