Mis a jour le 2025-04-14, 12:10

Requête http (urllib/urllib2)

Manipulation d'URLs :
  • faire import urllib.parse
  • parsing d'une URL : parseRes = urllib.parse.urlsplit('http://www.example.com:8080/myApp/info?param1=value1&param2=value%202%24') : renvoie un objet urllib.parse.SplitResult avec les propriétés :
    • parseRes.scheme : ici http
    • parseRes.netloc : ici www.example.com:8080
    • parseRes.hostname : ici www.example.com
    • parseRes.port : ici 8080 (entier)
    • parseRes.path : ici /myApp/info
    • parseRes.query : ici param1=value1&param2=value%202%24
  • on peut alors parser la query string : urllib.parse.parse_qs(parseRes.query) : renvoie ici {'param1': ['value1'], 'param2': ['value 2$']}
  • urllib.parse.quote('value 2$') : encode un paramètre, ici donne value%202%24
  • urllib.parse.quote_plus('value 2$') : idem, mais remplace les espaces par des + : ici donne value+2%24
  • urllib.parse.urlencode({'param1': 'value1', 'param2': 'value 2$'} : transforme un dictionnaire en query string, ici param1=value1&param2=value+2%24
Requête :
  • forme la plus simple : fh = urllib2.urlopen('http://myserver.org/'); output = fh.read()
  • on peut utiliser aussi un objet Request : req = urllib2.Request('http://myserver.org/'); fh = urllib2.urlopen(req); output = fh.read()
  • sous forme de post : values = {'var1': 'val1, 'var2': 'val2'}; data = urllib.urlencode(values); req = urllib2.Request('http://myserver.org/', data); fh = urllib2.urlopen(req); output = fh.read()
Requête avec authentification :
  • à chaque fois qu'on utilise urlopen, on utiliser en fait un opener qui a des handlers (même si ce sont ceux par défaut).
  • manager = urllib2.HTTPPasswordMgrWithDefaultRealm(); manager.add_password(None, myUrl, myUser, myPassword) : on construit un password manager qui utilisera cette authentification pour cette url quelque soit le realm (car on ne connait pas le realm à l'avance !)
  • authHandler = urllib2.HTTPBasicAuthHandler(manager) : crée un handler pour ce manager.
  • opener = urllib2.build_opener(authHandler); urllib2.install_opener(opener) : crée un opener et l'installe pour l'utiliser automatiquement.
  • fh = urllib2.urlopen(theurl) : enfin, ouvre la page.

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert