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!

37
demandé sur adamJLev 2010-05-12 02:33:10

3 réponses

Urllib.urlencode

Et oui, le urllib / urllib2 la division du travail est un peu déroutante dans Python 2.X.

18
répondu msw 2010-05-11 22:39:18

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 :)

33
répondu Tomasz Zielinski 2012-12-10 19:25:06
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).

1
répondu Vijay Chander 2015-04-16 05:16:53