Подтвердить что ты не робот

Не может urllib.urlencode URL в python

Почему я получаю эту ошибку при попытке urlencode этой строки

 >>> 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
4b9b3361

Ответ 1

Это не то, что делает эта функция:

urlencode(query, doseq=0)
    Encode a sequence of two-element tuples or dictionary into a URL query string.

Вы ищете urllib.quote(callback)?

Ответ 2

Python - это не PHP. Вы хотите urllib.quote() вместо этого.

Ответ 3

UrlEncode()

  Эта функция кодирует только двухэлементные кортежи или словарь.

  >>> import urllib  
  >>> dict = { 'First_Name' : 'Jack', 'Second_Name' : "West"}
  >>> urllib.urlencode(dict)
  'First_Name=Jack&Second_Name=West

quote_plus()

   Эта функция кодирует строку URL

  >>> import urllib   
  >>> url ="https://www.google.com/"
  >>> urllib.quote_plus(url)
  'https%3A%2F%2Fwww.google.com%2F'

Ответ 4

Python 3

В Python 3 функции цитат и urlencode находятся в модуле urllib.parse.

Некоторые примеры:

(Ип) цитата

urllib.parse.цитатой

Замените специальные символы в строке, используя escape-строку% xx.

>>> import urllib.parse
>>> urllib.parse.quote('https://www.google.com/')
'https%3A//www.google.com/'

Аналогично, чтобы отменить эту операцию, используйте urllib.parse.unquote:

urllib.parse.Unquote

Replace %xx escapes by their single-character equivalent.

>>> import urllib.parse
>>> urllib.parse.unquote('https%3A//www.google.com/')
'https://www.google.com/'

(ип) quote_plus

urllib.parse.quote_plus

Подобно quote(), но также заменяйте пробелы знаками плюса, как это требуется для цитирования значений HTML-формы при создании строки запроса для перехода в URL.

>>> import urllib.parse
>>> urllib.parse.quote_plus('https://www.google.com/')
'https%3A%2F%2Fwww.google.com%2F'

Аналогично, чтобы отменить эту операцию, используйте urllib.parse.unquote_plus:

urllib.parse.unquote_plus

Подобно unquote(), но также заменяет знаки плюс пробелами, как это требуется для отмены цитирования значений HTML-форм.

>>> import urllib.parse
>>> urllib.parse.unquote_plus('https%3A%2F%2Fwww.google.com%2F')
'https://www.google.com/'

UrlEncode

urllib.parse.UrlEncode

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