Python et urllib2: comment faire une requête GET avec des paramètres
Je construis une" API API", c'est essentiellement un wrapper pour un service web REST interne auquel l'application web fera beaucoup de demandes. Certains des appels de service web doivent être GET plutôt que post, mais passer des paramètres.
Existe - t-il une méthode "best practice" pour encoder un dictionnaire dans une chaîne de requête? par exemple: ?foo=bar&bla=blah
Je regarde les documents urllib2, et il semble qu'il décide par lui-même d'Utiliser POST ou GET basé sur si vous passez des paramètres ou non, mais peut-être quelqu'un sait comment le faire transformer le dictionnaire params en une requête GET.
Peut-être qu'il y a un paquet pour quelque chose comme ça là-bas? Ce serait génial s'il supportait keep-alive, car le serveur web demandera constamment des choses au service REST.
Idéalement quelque chose qui transformerait également le XML en une sorte d'objet Python traversable.
Merci!
3 réponses
Et oui, le urllib
/ urllib2
la division du travail est un peu déroutante dans Python 2.X.
Est urllib.urlencode () {[6] } pas assez?
>>> import urllib
>>> urllib.urlencode({'foo': 'bar', 'bla': 'blah'})
foo=bar&bla=blah
Modifier:
, Vous pouvez également mettre à jour l'url existante:
>>> import urlparse, urlencode
>>> url_dict = urlparse.parse_qs('a=b&c=d')
>>> url_dict
{'a': ['b'], 'c': ['d']}
>>> url_dict['a'].append('x')
>>> url_dict
{'a': ['b', 'x'], 'c': ['d']}
>>> urllib.urlencode(url_dict, True)
'a=b&a=x&c=d'
Notez que la fonction parse_qs
était dans le paquet cgi
avant python 2.6
MODIFIER 23/04/2012:
Vous pouvez également jeter un oeil à Python-requests - il devrait tuer urllibs éventuellement :)
import urllib
data = {}
data["val1"] = "VALUE1"
data["val2"] = "VALUE2"
data["val3"] = "VALUE3"
url_values = urllib.urlencode(data)
url = "https://www.python.org"
print url + "?" + url_values
L'url_values est une valeur codée et peut être utilisée pour poster sur le serveur avec l'url en tant que chaîne de requête(url+"?"+url_values).