python-requests: commande get paramètres
Je me suis mise en œuvre d'une bibliothèque cliente pour un privé HTTP-API à l'aide de python demandes. L'API(que je n'ai pas le contrôle) attend les paramètres pour être dans un certain ordre, mais python-demandes de ne pas honorer une triés dict comme paramètre.
C'est ce que j'ai essayé:
import requests
from django.utils.datastructures import SortedDict
params = SortedDict()
params['s'] = 'value1'
params['f'] = 'value2'
requests.get('https://example.org/private_api', params=params)
#performs request as https://example.org/private_api?f=value1&s=value2
C'est ce que je cherche à éviter:
requests.get('https://example.org?{0}'.format(urlencode(params)))
source d'informationauteur tback
Vous devez vous connecter pour publier un commentaire.
Actuellement ne permettent pas de faire ce que vous souhaitez. C'est bien sûr lacune qui sera fixe. Cependant, comme
params
paramètre ne peut pas prendre seul dictionnaire, mais d'octets en tant que bien, vous devriez être en mesure de faire quelque chose entre les deux:Cela ne fonctionne pas comme je le vois à cause de bogues dans la ligne 85 de models.py:
self.params = dict(params or []
.J'ai soulevé ce problème en cause Une mauvaise manipulation de paramètres donnés en octets de l'objet
Les demandes lib prend désormais en charge cette out-of-the-box: Pour obtenir commandé des paramètres que vous utilisez une séquence de deux à valeur de tuples à la place. Ceci élimine le besoin supplémentaire de OrderedDict.
Démo:
Ligne 85 de
requests/models.py
(lien) transforme leparams
objet dans une plainedict
plutôt que de laSortedDict
passée dans. Je ne pense pas que vous serez en mesure de faire ce que vous voulez, sauf si vous patch de la bibliothèque.Il est utilisé avec la version 2.2.0:
Plus de détails? Veuillez vérifier dans ici.
J'ai trouvé que cela fonctionne dans
1.2.3
ainsi que2.0.0