Pourquoi est-ce que j'obtiens cette erreur lorsque j'essaie de coder en url cette chaîne
>>> callback = "http://localhost/application/authtwitter?twitterCallback"
>>> urllib.urlencode(callback)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/urllib.py", line 1261, in urlencode
raise TypeError
TypeError: not a valid non-string sequence or mapping object
Ce n'est pas ce que fait cette fonction:
urlencode(query, doseq=0)
Encode a sequence of two-element tuples or dictionary into a URL query string.
Recherchez-vous urllib.quote(callback)
?
Python n'est pas PHP. Vous voulez urllib.quote()
à la place.
rlencode ()
Cette fonction code uniquement les tuples à deux éléments ou le dictionnaire.
>>> import urllib
>>> dict = { 'First_Name' : 'Jack', 'Second_Name' : "West"}
>>> urllib.urlencode(dict)
'First_Name=Jack&Second_Name=West
quote_plus ()
Cette fonction code la chaîne d'url
>>> import urllib
>>> url ="https://www.google.com/"
>>> urllib.quote_plus(url)
'https%3A%2F%2Fwww.google.com%2F'
Dans Python 3, les fonctionnalités quote et urlencode se trouvent dans le module urllib.parse
.
Quelques exemples:
Remplacez les caractères spéciaux dans la chaîne à l'aide de l'échappement% xx.
>>> import urllib.parse
>>> urllib.parse.quote('https://www.google.com/')
'https%3A//www.google.com/'
De même, pour inverser cette opération, utilisez urllib.parse.unquote:
Remplacez% xx les échappements par leur équivalent à un seul caractère.
>>> import urllib.parse
>>> urllib.parse.unquote('https%3A//www.google.com/')
'https://www.google.com/'
Comme quote (), mais remplace également les espaces par des signes plus, comme requis pour citer des valeurs de formulaire HTML lors de la création d'une chaîne de requête pour aller dans une URL.
>>> import urllib.parse
>>> urllib.parse.quote_plus('https://www.google.com/')
'https%3A%2F%2Fwww.google.com%2F'
De même, pour inverser cette opération, utilisez urllib.parse.unquote_plus:
Comme unquote (), mais remplacez également les signes plus par des espaces, comme requis pour la non-cotation des valeurs de formulaire HTML.
>>> import urllib.parse
>>> urllib.parse.unquote_plus('https%3A%2F%2Fwww.google.com%2F')
'https://www.google.com/'
>>> import urllib.parse
>>> d = {'url': 'https://google.com', 'event': 'someEvent'}
>>> urrlib.parse.urlencode(d)
'url=https%3A%2F%2Fgoogle.com&event=someEvent'