J'essaie de coder cette chaîne en url avant de soumettre.
queryString = 'eventName=' + evt.fields["eventName"] + '&' + 'eventDescription=' + evt.fields["eventDescription"];
Vous devez passer vos paramètres urlencode()
sous forme de mappage (dict) ou de séquence de 2 tuples, comme:
>>> import urllib
>>> f = { 'eventName' : 'myEvent', 'eventDescription' : 'cool event'}
>>> urllib.urlencode(f)
'eventName=myEvent&eventDescription=cool+event'
Python 3 ou supérieur
Utilisation:
>>> urllib.parse.urlencode(f)
eventName=myEvent&eventDescription=cool+event
Notez que cela ne fait pas de codage d'URL dans le sens couramment utilisé (regardez la sortie). Pour cette utilisation urllib.parse.quote_plus
.
Python 2
Ce que vous recherchez, c'est
urllib.quote_plus
:Python 3
En Python 3, le
urllib
package a été divisé en composants plus petits. Vous utiliserezurllib.parse.quote_plus
(notez leparse
module enfant)la source
import urllib.parse ... urllib.parse.quote_plus(query)
python3 -c "import urllib.parse, sys; print(urllib.parse.quote_plus(sys.argv[1])) "string to encode"
pour un one liner sur la ligne de commandeEssayez les demandes au lieu de urllib et vous n'aurez pas à vous soucier de l'urlencode!
ÉDITER:
Si vous avez besoin de paires nom-valeur ordonnées ou de plusieurs valeurs pour un nom, définissez les paramètres comme suit:
au lieu d'utiliser un dictionnaire.
la source
Le contexte
Problème
Solution
Pièges
Exemple
Ce qui suit est une solution complète, y compris comment gérer certains pièges.
la source
Python 3:
urllib.parse.quote_plus (string, safe = '', encoding = None, errors = None)
la source
urllib.parse.quote()
me préfère car il utilise%20
plutôt que+
.Essaye ça:
urlencode
ne fonctionnera pas car il ne fonctionne que sur les dictionnaires.quote_plus
n'a pas produit la sortie correcte.la source
my string
àmy%20string
. Votre solution fonctionne comme un charme pour ça!%20
au lieu de+
. MerciNotez que le urllib.urlencode ne fait pas toujours l'affaire. Le problème est que certains services se soucient de l'ordre des arguments, qui est perdu lorsque vous créez le dictionnaire. Pour de tels cas, urllib.quote_plus est meilleur, comme l'a suggéré Ricky.
la source
>>> import urllib >>> urllib.urlencode([('name', 'brandon'), ('uid', 1000)]) 'name=brandon&uid=1000'
En Python 3, cela a fonctionné avec moi
la source
pour les futures références (ex: pour python3)
la source
'c:/2 < 3'
sous Windows est'///C://2%20%3C%203'
. Je veux quelque chose qui ne ferait que sortir'c:/2%20%3C%203'
.Pour une utilisation dans des scripts / programmes qui doivent prendre en charge à la fois python 2 et 3, le module six fournit des fonctions de citation et d'urlencode:
la source
Si urllib.parse.urlencode () vous donne des erreurs, essayez le module urllib3.
La syntaxe est la suivante:
la source
Une autre chose qui n'a peut-être pas déjà été mentionnée est que
urllib.urlencode()
les valeurs vides dans le dictionnaire seront encodées en tant que chaîneNone
au lieu d'avoir ce paramètre absent. Je ne sais pas si cela est généralement souhaité ou non, mais ne correspond pas à mon cas d'utilisation, donc je dois l'utiliserquote_plus
.la source
Pour Python 3 urllib3 fonctionne correctement, vous pouvez utiliser comme suit selon ses documents officiels :
la source