Construire la chaîne de requête à l'aide de la fonction urlencode python

Je suis en train de construire une url pour que je puisse envoyer une requête get à l'aide de urllib module.

Supposons que mon final_url devrait être

url = "www.example.com/find.php?data=http%3A%2F%2Fwww.stackoverflow.com&search=Generate+value"

Dès maintenant pour réaliser cela, j'ai essayé la manière suivante:

>>> initial_url = "http://www.stackoverflow.com"
>>> search = "Generate+value"
>>> params = {"data":initial_url,"search":search}
>>> query_string = urllib.urlencode(params)
>>> query_string
'search=Generate%2Bvalue&data=http%3A%2F%2Fwww.stackoverflow.com'

Maintenant, si vous comparez mon query_string avec le format de final_url vous pouvez observateur de deux choses

1) L'ordre de paramètres sont inversés au lieu de data=()&search= il est search=()&data=

2) urlencode aussi encodé le + dans Generate+value

Je crois que le premier changement est dû à l'aléatoire du comportement de dictionnaire. Donc, j'ai bien de l'aide OrderedDict pour inverser le dictionnaire. Comme, je suis en utilisant python 2.6.5 je n'ai

pip install ordereddict

Mais je ne suis pas capable de l'utiliser dans mon code quand j'essaye

>>> od = OrderedDict((('a', 'first'), ('b', 'second')))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'OrderedDict' is not defined

Donc, ma question est quelle est la façon correcte d'utiliser OrderedDict en python 2.6.5 et comment puis-je faire urlencode ignore la + dans Generate+value.

Aussi, est-ce la bonne approche pour construire URL.

OriginalL'auteur RanRag | 2012-05-26