Bonjour à tous,
Voici mon problème. Je réalise un petit navigateur qui utilise le module httplib. Jusque là aucun problème, voici une partie de mon code :
Après quelques redirections je récupère correctement mon 200 OK.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import httplib header = dict(); header["User-Agent"] = "MonNav" header["Accept-Encoding"] = "gzip,deflate" header["Keep-Alive"] = "300" header["Connection"] = "keep-alive" conn = httplib.HTTPConnection("google.com") #c'est ici que je passe header en paramètre conn.request ("GET" , "/index.html", None, header) r1 = conn.getresponse() print r1.status, r1.reason data1 = r1.read() conn.close()
Le problème est que lorsque j'observe la communication avec mon sniffer (Wireshark), je remarque que les lignes du header ne sont pas du tout dans le bon ordre! Evidemment j'aurais pu le voir avec :
Je suis tout à fait d'accord sur le fait que celà ne gène pas le fonctionnement de mon navigateur, du côté du serveur ces variables sont sans doute bien récupérées. Mais puisque je tente de me baser sur les données sniffées de firefox, celà me pose un réel problème de lisibilité. J'aimerais vraiment que ces lignes ne se mélangent pas! Sinon j'aurai vite fait d'oublier une ligne par-ci par-là.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 print header {'Keep-Alive': '300', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip,deflate', 'User-Agent': 'MonNav'}
Je suis allé lire la doc de python et voilà ce qu'on y trouve :
C'est la seule note que j'ai trouvée sur toute cette histoire d'ordre dans la liste retournée par un dict...Note
Keys and values are listed in an arbitrary order which is non-random, varies across Python implementations, and depends on the dictionary’s history of insertions and deletions. If items(), keys(), values(), iteritems(), iterkeys(), and itervalues() are called with no intervening modifications to the dictionary, the lists will directly correspond. This allows the creation of (value, key) pairs using zip(): pairs = zip(d.values(), d.keys()). The same relationship holds for the iterkeys() and itervalues() methods: pairs = zip(d.itervalues(), d.iterkeys()) provides the same value for pairs. Another way to create the same list is pairs = [(v, k) for (k, v) in d.iteritems()].
J'ai pensé à utiliser autre chose qu'un type dict mais la fonction HTTPConnection.request() demande un argument de type dict obligatoirement.
Or, et c'est peut être là que je me trompe, il me semble que le seul dans ce cas est le type dict.The header argument should be a mapping of extra HTTP headers to send with the request.
Une solution? Merci d'avance!
Partager