web-dev-qa-db-fra.com

ne peut pas urllib.urlencode une URL dans python

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
33
BillPull

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)?

50
retracile

Python n'est pas PHP. Vous voulez urllib.quote() à la place.

17

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'
10
Vicky

Python 3

Dans Python 3, les fonctionnalités quote et urlencode se trouvent dans le module urllib.parse .

Quelques exemples:

(fin de citation

urllib.parse. quote

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:

urllib.parse. sans guillemets

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/'

(un) quote_plus

urllib.parse. quote_plus

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:

urllib.parse. nquote_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/'

urlencode

urllib.parse. rlencode

>>> import urllib.parse
>>> d = {'url': 'https://google.com', 'event': 'someEvent'}
>>> urrlib.parse.urlencode(d)
'url=https%3A%2F%2Fgoogle.com&event=someEvent'
0
ncw