Requests: الطلبات 2.11: فشل check_header_validity في الرأس بقيمة عدد صحيح

تم إنشاؤها على ٨ أغسطس ٢٠١٦  ·  23تعليقات  ·  مصدر: psf/requests

أهلا،

نظرًا لأن الطلبات 2.11 ، فإن جميع مكالماتي التي تستخدم طلبات تطبيقي معطلة. بعد التصحيح ، يبدو أن هذا الإصدار لا يقبل رأسًا بقيمة عددية ، كما كان من قبل.

2.10:

In [1]: import requests

In [2]: requests.get('http://bing.com', headers={'Content-Length': 42})
Out[2]: <Response [200]>

2.11

In [1]: import requests

In [2]: requests.get('http://bing.com', headers={'Content-Length': 42})
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
D:\VSProjects\azure-sdk-for-python\env3.5\Lib\site-packages\requests\utils.py in check_header_validity(header)
    751     try:
--> 752         if not pat.match(value):
    753             raise InvalidHeader("Invalid return character or leading space in header: %s" % name)

TypeError: expected string or bytes-like object

During handling of the above exception, another exception occurred:

InvalidHeader                             Traceback (most recent call last)
<ipython-input-2-ae7ec2933e34> in <module>()
----> 1 requests.get('http://bing.com', headers={'Content-Length': 42})

D:\VSProjects\azure-sdk-for-python\env3.5\Lib\site-packages\requests\api.py in get(url, params, **kwargs)
     68
     69     kwargs.setdefault('allow_redirects', True)
---> 70     return request('get', url, params=params, **kwargs)
     71
     72

D:\VSProjects\azure-sdk-for-python\env3.5\Lib\site-packages\requests\api.py in request(method, url, **kwargs)
     54     # cases, and look like a memory leak in others.
     55     with sessions.Session() as session:
---> 56         return session.request(method=method, url=url, **kwargs)
     57
     58

D:\VSProjects\azure-sdk-for-python\env3.5\Lib\site-packages\requests\sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    455             hooks = hooks,
    456         )
--> 457         prep = self.prepare_request(req)
    458
    459         proxies = proxies or {}

D:\VSProjects\azure-sdk-for-python\env3.5\Lib\site-packages\requests\sessions.py in prepare_request(self, request)
    388             auth=merge_setting(auth, self.auth),
    389             cookies=merged_cookies,
--> 390             hooks=merge_hooks(request.hooks, self.hooks),
    391         )
    392         return p

D:\VSProjects\azure-sdk-for-python\env3.5\Lib\site-packages\requests\models.py in prepare(self, method, url, headers, files, data, params, auth, cookies, hooks, json)
    293         self.prepare_method(method)
    294         self.prepare_url(url, params)
--> 295         self.prepare_headers(headers)
    296         self.prepare_cookies(cookies)
    297         self.prepare_body(data, files, json)

D:\VSProjects\azure-sdk-for-python\env3.5\Lib\site-packages\requests\models.py in prepare_headers(self, headers)
    407             for header in headers.items():
    408                 # Raise exception on invalid header value.
--> 409                 check_header_validity(header)
    410                 name, value = header
    411                 self.headers[to_native_string(name)] = value

D:\VSProjects\azure-sdk-for-python\env3.5\Lib\site-packages\requests\utils.py in check_header_validity(header)
    754     except TypeError:
    755         raise InvalidHeader("Header value %s must be of type str or bytes, "
--> 756                             "not %s" % (value, type(value)))
    757
    758

InvalidHeader: Header value 42 must be of type str or bytes, not <class 'int'>

نحدد "طول المحتوى" في كل طلب. على أي حال ، فإن استخدام عدد صحيح لرأس يكون معنويًا عددًا صحيحًا لا معنى له؟

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

يبدو وكأنه تغيير جذري لإصدار نقطة ، أليس كذلك؟

ال 23 كومينتر

لم يكن عدم استخدام السلاسل لقيم الرأس طريقة مقبولة على الإطلاق لاستخدام الطلبات ، للأسف ، وبينما كان مسموحًا به في الإصدارات السابقة ، فقد أجرينا منذ ذلك الحين تغييرات لا تسمح بذلك. ويرجع ذلك أساسًا إلى أن الرؤوس هي تعيينات سلاسل سلاسل _ حقًا ، ولكن أيضًا لأن الأسلوب العام لاستدعاء str للأشياء التي يتم تمريرها إلى الطلبات يميل إلى سوء التصرف بطرق غير متوقعة تفاجئ المستخدمين.

TL ؛ DR من هذا هو: نعم ، تم ذلك عن قصد ، ولا ، لا نعتقد أنه خطأ.

أنظر أيضا: # 865.

يبدو وكأنه تغيير جذري لإصدار نقطة ، أليس كذلك؟

وأنت لم تصف هذا التعديل الضخم في سجل التغيير :(

هذا ليس تغييرًا فاصلاً في واجهة برمجة التطبيقات - تم توثيق واجهة برمجة التطبيقات بوضوح على أنها قائمة على السلسلة ، في جميع الوثائق. حقيقة أنك كنت تستخدمه مع الأعداد الصحيحة ، بدلاً من الإدخال المقصود ، هو خطأ في التعليمات البرمجية الخاصة بك ، وليس في قاعدة الكود هذه أو تغيير في واجهة برمجة التطبيقات.

قد تكون إضافة ملاحظة في سجل التغيير حول هذا التغيير غير المتقطع فكرة جيدة.

@ clarkbreyman-yammer لكي أكون واضحًا ، هذه حالة حدودية نوعًا ما. يمكنك أن ترى اتخاذ القرار مؤخرًا في # 3386 و # 3388 ، لكن الوسيطة الأساسية هي: لم تكن الرؤوس التي لا تحتوي على سلسلة نصية _ مقصودة_ للعمل مطلقًا ، لذا فإن حقيقة توقفها عن العمل أمر مقبول. في الواقع ، هذا لم ينجح من قبل في الماضي.

lmazuel أنت محق في أن هذا قد فاتني من سجل التغيير ، وهذا خطأي بنسبة 100٪: كان الانهيار هنا عرضيًا للتحقق الأكثر إحكامًا من قيم الرأس ، ونتيجة لذلك لم أره عندما كنت أقوم بتجميع التغيير. أرحب بالعلاقات العامة التي تقوم بتحديث التغيير إذا كنت ترغب في إنشاء واحدة.

ولكي نكون واضحين ، نحن الثلاثة متفقون على هذا. حقيقة أن إرسال عدد صحيح هناك _ أيا كان _ عمل كان حظًا بحتًا. اعتاد ألا يعمل على الإطلاق وقررنا أنه لا ينبغي أن يعمل أبدًا منذ فترة طويلة. لم يكن لدينا أي شيء - تم فرضه - على الرغم من ذلك.

ومع ذلك ، فإن إضافة ذلك كميزة مدعومة من المحتمل أن تكون فكرة رائعة ، وسيكون تغيير API مرحبًا به في كتابي (إذا تم التنفيذ بشكل جيد). ومع ذلك ، من المرجح أن يبقى الوضع الحالي للأشياء في المستقبل البعيد.

تمت إضافة ملاحظة في سجل التغيير.

شكرا @ kennethreitz.

حسنا، شكرا لهذا التوضيح. سوف أقوم بتحديث الكود الخاص بي وفقًا لذلك.
@ kennethreitz إذا كان بإمكانك إضافة ملاحظتك في PyPI أيضًا ، فسيكون ذلك رائعًا.

lmazuel على ذلك!

تضمين التغريدة

lmazuel PS شكرا لك على الرعاية: P

لقد أصلحت الكود الخاص بي ، كل شيء آخر يعمل بشكل رائع. شكرا لوقت استجابتك فائق السرعة!

في الوثائق الرسمية لا يوجد ذكر للتغيير الكبير. انها حقا مضللة.

لا يعتبره فريق الطلبات تغييرًا كبيرًا ، بل يعتبر إصلاحًا للأخطاء يتناسب مع حدود سلوك المكتبة الموثقة.

مرحبًا COLDMOUNT ، يمكنك العثور على الوثائق هنا في الفقرة الأخيرة من قسم Quickstart للعناوين المخصصة. ونحن أيضا نشر التغيير في HISTORY.rst ل2.11.0 وهو التغيير الطلبات.

من الأفضل تقديم مثال على الرؤوس في نوع str ، أو كيفية القيام بذلك
ترجمة ترويسات في نوع دكت إلى نوع str ، شكرًا.

2016-09-27 1:30 GMT + 08: 00 Nate Prewitt [email protected] :

مرحبًا COLDMOUNT https://github.com/COLDMOUNT ، يمكنك العثور على
الوثائق هنا
http://docs.python-requests.org/en/master/user/quickstart/#custom -headers
في الفقرة الأخيرة من قسم Quickstart للعناوين المخصصة. نحن
قام أيضًا بنشر التغيير في (HISTORY.rst) [ https: // github.
com / kennethreitz / Orders / blob / master / HISTORY.rst] لـ 2.11.0 وهو
سجل التغيير الطلبات.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/kennethreitz/requests/issues/3477#issuecomment -249638650 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ARIa89wU7tKL8Br2WWU6lJy8HEbNr72Vks5quAE3gaJpZM4JffFG
.

أو كيف تترجم رؤوس من نوع دكت إلى نوع str

انتظر ماذا؟ كيف كنت ترسل الرؤوس من قبل؟

تمامًا كدليل على الصفحة -
http://docs.python-requests.org/en/master/user/quickstart/ - "إذا كنت
ترغب في إضافة رؤوس HTTP إلى طلب ما ، ما عليك سوى تمرير أمر d إلى الرؤوس
المعلمة. "ولكن الآن لم يعد يُقبل النوع dt ، وماذا يفعل str
اكتب يشبه؟

2016-09-27 17:51 GMT + 08: 00 كوري بنفيلد [email protected] :

أو كيف تترجم رؤوس من نوع دكت إلى نوع str

انتظر ماذا؟ كيف كنت ترسل الرؤوس من قبل؟

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/kennethreitz/requests/issues/3477#issuecomment -249819028 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ARIa8_ZPJmzxH2lWmpTvSJ3PvHE7jlpvks5quOcrgaJpZM4JffFG
.

تم قبولCOLDMOUNT dict _absolutely_ ، ولم نقم بتغيير ذلك على الإطلاق. ما قمنا بتغييره هو أن مفاتيح وقيم هذا الإملاء يجب أن تكون الآن سلاسل. في السابق كان من الممكن أن يكونوا بضعة أنواع أخرى عن طريق الصدفة ، والتي تم حلها الآن. الوثائق لا تحتاج إلى تغيير.

حسنًا ، رائع! شكرا! :)

2016-09-27 18:23 GMT + 08: 00 كوري بنفيلد [email protected] :

COLDMOUNT https://github.com/COLDMOUNT deb تم قبول _absolutely_ ،
لم نغير ذلك على الإطلاق. ما قمنا بتغييره هو أن المفاتيح و
يجب أن تكون قيم هذا الإملاء سلاسل. في السابق كان من الممكن ل
تكون أنواعًا قليلة أخرى عن طريق الصدفة ، والتي تم حلها الآن. ال
الوثائق لا تحتاج إلى تغيير.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/kennethreitz/requests/issues/3477#issuecomment -249825918 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ARIa8z0jZ-ovBtvFWl4hTXnkk_kJXobrks5quO6ggaJpZM4JffFG
.

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