Salut,
Depuis les requĂȘtes 2.11, tous mes appels utilisant des requĂȘtes pour mon application sont interrompus. AprĂšs dĂ©bogage, il semble que cette version n'accepte pas les en-tĂȘtes avec une valeur entiĂšre, comme c'Ă©tait le cas auparavant.
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'>
Nous dĂ©finissons 'Content-Length' dans chaque requĂȘte. Quoi qu'il en soit, utiliser un entier pour un en-tĂȘte qui est sĂ©mantiquement un entier a du sens non?
Les non-chaĂźnes pour les valeurs d'en-tĂȘte n'ont jamais Ă©tĂ© un moyen acceptĂ© d'utiliser les requĂȘtes, malheureusement, et alors que cela Ă©tait autorisĂ© dans les versions prĂ©cĂ©dentes, nous avons depuis apportĂ© des modifications qui l'interdisent. C'est principalement parce que les en-tĂȘtes sont _vraiment_ des mappages de chaĂźnes de caractĂšres, mais aussi parce que l'approche gĂ©nĂ©rale consistant Ă appeler str
sur des éléments transmis à Requests a tendance à mal se comporter de maniÚre inattendue qui surprend les utilisateurs.
Le TL;DR de ceci est : oui, cela a été fait exprÚs, et non, nous ne pensons pas que ce soit un bug.
Voir aussi : #865.
Cela ressemble à un changement radical pour une libération de points, non ?
Et vous n'avez pas décrit cette énorme modification dans le ChangeLog :(
Il ne s'agit pas d'un changement d'API de rupture â l'API est clairement documentĂ©e comme Ă©tant basĂ©e sur des chaĂźnes, tout au long de la documentation. Le fait que vous l'utilisiez avec des entiers, au lieu de son entrĂ©e prĂ©vue, est un bogue dans votre code, pas dans cette base de code ou un changement dans l'API.
L'ajout d'une note dans le journal des modifications Ă propos de ce changement permanent peut ĂȘtre une bonne idĂ©e.
@clarkbreyman-yammer Pour ĂȘtre clair, c'est un peu un cas limite. Vous pouvez voir la prise de dĂ©cision la plus rĂ©cente dans #3386 et #3388, mais l'argument de base est le suivant : les en-tĂȘtes non-chaĂźne n'ont jamais Ă©tĂ© destinĂ©s Ă fonctionner, donc le fait qu'ils aient cessĂ© de fonctionner est acceptable. En fait, cela n'a pas fonctionnĂ© auparavant dans le passĂ©.
@lmazuel Vous avez raison de dire que cela a été manqué dans le
Et pour ĂȘtre clair, nous sommes tous les trois d'accord sur ce point. Le fait que l'envoi d'un entier lĂ -bas ait jamais fonctionnĂ© Ă©tait purement chanceux. Cela ne fonctionnait pas du tout et nous avons dĂ©cidĂ© que cela ne devrait jamais fonctionner il y a longtemps. Nous n'avons jamais rien eu qui _enforce_ cela cependant.
Cela étant dit, ajouter qu'en tant que fonctionnalité prise en charge est potentiellement une excellente idée et serait un changement d'API bienvenu dans mon livre (si l'implémentation a été bien faite). Cependant, l'état actuel des choses est susceptible de rester dans un avenir prolongé.
Ajout d'une note dans le changelog.
Merci @kennethreitz.
D'accord, merci pour la précision. Je mettrai à jour mon code en conséquence.
@kennethreitz si vous pouviez Ă©galement ajouter votre note dans PyPI, ce serait incroyable.
@lmazuel dessus !
@lmazuel terminé
@lmazuel ps merci de votre attention :P
J'ai corrigé mon code, tout le reste fonctionne trÚs bien. Merci pour votre temps de réponse ultra rapide !
dans les documentations officielles, il n'y a aucune mention du changement majeur. C'est vraiment trompeur.
Ce n'est pas considéré comme un changement majeur par l'équipe des demandes, c'est considéré comme une correction de bogue qui s'inscrit dans les limites du comportement de la bibliothÚque documentée.
HĂ© @COLDMOUNT , vous pouvez trouver la documentation ici dans le dernier paragraphe de la section de dĂ©marrage rapide pour les en-tĂȘtes personnalisĂ©s. Nous avons Ă©galement publiĂ© le changement dans HISTORY.rst pour 2.11.0 qui est le changelog de Requests.
Il est prĂ©fĂ©rable de proposer un exemple des en-tĂȘtes de type str, ou comment
traduire un en-tĂȘte de type dict en type str, merci.
2016-09-27 1:30 GMT+08:00 Nate Prewitt [email protected] :
HĂ© @COLDMOUNT https://github.com/COLDMOUNT , vous pouvez trouver le
documentation ici
http://docs.python-requests.org/en/master/user/quickstart/#custom -headers
dans le dernier paragraphe de la section de dĂ©marrage rapide pour les en-tĂȘtes personnalisĂ©s. Nous
a également publié le changement dans (HISTORY.rst)[ https://github.
com/kennethreitz/requests/blob/master/HISTORY.rst] pour 2.11.0 qui est
Changelog des requĂȘtes.-
Vous recevez ceci parce que vous avez été mentionné.
RĂ©pondez directement Ă cet e-mail, consultez-le sur GitHub
https://github.com/kennethreitz/requests/issues/3477#issuecomment-249638650 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ARIa89wU7tKL8Br2WWU6lJy8HEbNr72Vks5quAE3gaJpZM4JffFG
.
ou comment traduire un en-tĂȘte de type dict en type str
Attends quoi? Comment envoyiez-vous les en-tĂȘtes avant ?
Tout comme le guide sur la page --
http://docs.python-requests.org/en/master/user/quickstart/ -- "Si vous vouliez
comme ajouter des en-tĂȘtes HTTP Ă une requĂȘte, passez simplement un dict aux en-tĂȘtes
paramÚtre." Mais maintenant, le type dict n'est plus accepté, et qu'est-ce que le str
type ressembler?
27/09/2016 17:51 GMT+08:00 Cory Benfield [email protected] :
ou comment traduire un en-tĂȘte de type dict en type str
Attends quoi? Comment envoyiez-vous les en-tĂȘtes avant ?
-
Vous recevez ceci parce que vous avez été mentionné.
RĂ©pondez directement Ă cet e-mail, consultez-le sur GitHub
https://github.com/kennethreitz/requests/issues/3477#issuecomment-249819028 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ARIa8_ZPJmzxH2lWmpTvSJ3PvHE7jlpvks5quOcrgaJpZM4JffFG
.
@COLDMOUNT dict
est _absolument_ acceptĂ©, nous n'avons rien changĂ© du tout. Ce que nous avons changĂ©, c'est que les clĂ©s et les valeurs de ce dict doivent maintenant ĂȘtre des chaĂźnes. Auparavant, il Ă©tait possible qu'ils soient quelques autres types par accident, ce qui a maintenant Ă©tĂ© rĂ©solu. La documentation n'a pas besoin d'ĂȘtre modifiĂ©e.
Compris, cool ! Merci! :)
2016-09-27 18:23 GMT+08:00 Cory Benfield [email protected] :
@COLDMOUNT https://github.com/COLDMOUNT dict est _absolument_ accepté,
nous n'avons rien changé du tout. Ce que nous avons changé, c'est que les clés et
les valeurs de ce dict doivent maintenant ĂȘtre des chaĂźnes. Auparavant, il Ă©tait possible pour
eux pour ĂȘtre quelques autres types par accident, qui a maintenant Ă©tĂ© rĂ©solu. Les
la documentation n'a pas besoin d'ĂȘtre modifiĂ©e.-
Vous recevez ceci parce que vous avez été mentionné.
RĂ©pondez directement Ă cet e-mail, consultez-le sur GitHub
https://github.com/kennethreitz/requests/issues/3477#issuecomment -249825918,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ARIa8z0jZ-ovBtvFWl4hTXnkk_kJXobrks5quO6ggaJpZM4JffFG
.
Commentaire le plus utile
Cela ressemble à un changement radical pour une libération de points, non ?