Je suis en train de construire une "API API", c'est essentiellement un wrapper pour un service Web interne REST auquel l'application Web fera beaucoup de demandes. Certains appels de service Web nécessitent être GET plutôt que poster, mais en passant des paramètres.
Existe-t-il une méthode de "meilleure pratique" pour coder un dictionnaire dans une chaîne de requête? par exemple.: ?foo=bar&bla=blah
Je regarde les rllib2 docs , et il semble qu'il décide par lui-même d'utiliser POST ou GET en fonction de si vous passez des paramètres ou non, mais peut-être quelqu'un sait comment transformer le dictionnaire params en une requête GET.
Peut-être qu'il existe un package pour quelque chose comme ça là-bas? Ce serait formidable 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 traversable python objet.
Merci!
Et oui, le urllib
/urllib2
la division du travail est un peu déroutante dans Python 2.x.
rllib.urlencode () ne suffit-il pas?
>>> import urllib
>>> urllib.urlencode({'foo': 'bar', 'bla': 'blah'})
foo=bar&bla=blah
ÉDITER:
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 parse_qs
la fonction était dans le package cgi
avant Python 2.6
EDIT 23/04/2012:
Vous pouvez également jeter un œil à python-requests - cela devrait finir par tuer les urllibs :)
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
Le url_values
Est une valeur codée et peut être utilisé pour publier sur le serveur avec l'URL comme une requête string(url+"?"+url_values)
.