Comment pour cent-encoder les paramètres d'URL en Python?
Si je ne
url = "http://example.com?p=" + urllib.quote(query)
- Il n'a pas d'encoder
/
à%2F
(pauses OAuth normalisation) - Il ne gère pas l'Unicode (elle lève une exception)
Est-il mieux de la bibliothèque?
- Ce ne sont pas des paramètres d'URL, pour info. Vous devez préciser.
Vous devez vous connecter pour publier un commentaire.
De la docs:
Que les moyens de passage " pour la sécurité permettra de résoudre votre première question:
À propos de la deuxième question, il y a un rapport de bug à ce sujet ici. Apparemment, il a été fixé en python 3. Vous pouvez le contourner par l'encodage utf8 comme ceci:
Par le chemin, regardez urlencode
Note que
urllib.quote
déménagé àurllib.parse.quote
en Python3reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
Qui est ce urllib.la citation est de traiter avec.urllib.quote
déménagé àurlib.parse.quote
, depuis Python3.urllib.parse.quote
docssix.moves.urllib.parse.quote(u"Müller".encode('utf8'))
pour Python 2 et 3.urllib.parse.quote('http://example.com/some path/').replace('%3A', ':')
En Python 3,
urllib.citation
a été déplacé àurllib.l'analyser.citation
et il ne manipuler unicode par défaut.quote
est plutôt vague mondiale. Il pourrait être plus agréable à utiliser quelque chose comme urlencode:from urllib.parse import quote as urlencode
.Ma réponse est similaire à Paolo de réponse.
Je pense que le module
requests
est beaucoup mieux. Il est basé sururllib3
.Vous pouvez essayer ceci:
requests.utils.quote
est lié à pythonquote
. Voir demande de sources.requests.utils.quote
est une couche de compatibilité wrapper poururllib.quote
pour python 2 eturllib.parse.quote
pour python 3Si vous êtes à l'aide de django, vous pouvez utiliser urlquote:
Note que les modifications apportées à Python depuis cette réponse a été publiée dire que c'est maintenant un héritage wrapper. Du Django 2.1 code source pour django.utils.http:
Il est préférable d'utiliser
urlencode
ici. Pas beaucoup de différence pour seul paramètre, mais à mon humble avis rend le code plus clair. (Il semble déroutant de voir une fonctionquote_plus
! surtout ceux qui viennent des autres languates)Docs
urlencode: https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlencode
quote_plus: https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote_plus