Requests: تعطل سلسلة url غير المعتادة هي py3

تم إنشاؤها على ١٩ يونيو ٢٠١٧  ·  4تعليقات  ·  مصدر: psf/requests

لقد قمت بتثبيت البرنامج الرئيسي الحالي عن طريق تثبيت ملف zipfile في بيئة python3 conda حديثة

base_url = " http: //............127.0.0.1 : 8082"
request.get (base_url)
حوادث

وينتهي بخطأ UnidodeError
python3.6 / encodings / idna.py "،
السطر 165 ، في الترميز
رفع UnicodeError ("التسمية فارغة أو طويلة جدًا")
خطأ Unicode: التسمية فارغة أو طويلة جدًا

قد يكون يمكنك التقاط هذا؟

التعليق الأكثر فائدة

للمهتمين بالقضية على جانب الثعبان
https://bugs.python.org/issue32958

ال 4 كومينتر

للأجيال القادمة ، فإن التتبع الكامل هو:

>>> 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 الطويلة) حتى يتم إصلاح الوظائف الأساسية. لقد قدمت خطأ به إلى متتبع الثعبان أمس.

للمهتمين بالقضية على جانب الثعبان
https://bugs.python.org/issue32958

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات