Nous allons utiliser le module socket.
1: import socket 2: 3: HOST = 'listes.example.com' # Le serveur 4: PORT = 80 # Le port 5: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 6: s.connect((HOST, PORT)) 7: s.sendall('''GET /anfexo/plm.html HTTP/1.1 8: Host: listes.example.com 9: 10: ''') 11: page='' 12: while True: 13: suite=s.recv(1024) 14: if suite: 15: page=page+suite 16: else: 17: break 18: s.close() 19: print page
page
contient toute la réponse du serveur : la ligne de statut (200 OK
), les en-têtes et le corps du message. Aucun découpage/analyse de la réponse n'est effectuée.
Voici un module spécialisé dans les requètes HTTP : httplib.
1: import httplib 2: 3: conn = httplib.HTTPConnection("listes.example.com") 4: conn.request("GET", "/anfexo/plm.html") 5: r1 = conn.getresponse() 6: 7: print "code: %s - message: %s"%(r1.status,r1.reason) 8: print "header: content-type: %s"%r1.getheader("content-type") 9: print "header: server: %s"%r1.getheader("server") 10: print "content: %s"%r1.read()
Nous allons utiliser le module urllib.
1: import urllib 2: 3: f=urllib.urlopen('http://listes.example.com/anfexo/plm.html') 4: print "code: %s"%f.getcode() 5: print "header: content-type: %s"%f.headers.getheader('content-type') 6: print "header: server: %s"%f.headers.getheader('server') 7: print "content: %s"%f.read()
Nous allons utiliser ici un module un peu plus évolué : urllib2.
1: import urllib2 2: import sys 3: 4: try: 5: f=urllib2.urlopen('http://listes.example.com/anfexo/plm.html') 6: except urllib2.HTTPError, e: 7: print "Erreur ",e.code 8: print e.read() 9: sys.exit(1) 10: except urllib2.URLError, e: 11: print 'Erreur de connexion' 12: print 'Raison: ', e.reason 13: sys.exit(2) 14: 15: print "code: %s"%f.getcode() 16: print "header: content-type: %s"%f.headers.getheader('content-type') 17: print "header: server: %s"%f.headers.getheader('server') 18: print "content: %s"%f.read()
Nous allons utiliser lxml pour extraire un formulaire de la réponse reçue, le remplir, le soumettre et consulter le retour.
1: import lxml 2: import lxml.html 3: 4: doc=lxml.html.parse("http://listes.example.com/cgi-bin/form.cgi").getroot() 5: 6: form=doc.forms[0] 7: form.fields['nom']='aicardi' 8: form.fields['prenom']='stephane' 9: form.fields['email']='stephane.aicardi@cnrs.math.fr' 10: 11: result = lxml.html.submit_form(form) 12: 13: print "code: %s"%result.getcode() 14: print "content: %s"%result.read()