不能在python中urllib.urlencode一个URL

时间:2011-10-14 21:57:33

标签: python urlencode urllib

为什么我在尝试对此字符串进行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

4 个答案:

答案 0 :(得分:46)

这不是那个功能的作用:

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

您在寻找urllib.quote(callback)吗?

答案 1 :(得分:16)

Python不是PHP。您想要urllib.quote()

答案 2 :(得分:10)

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

答案 3 :(得分:3)

Python 3

在Python 3中,引号和urlencode功能位于模块urllib.parse中。

一些例子:

(un)quote

urllib.parse。 quote

  

使用%xx转义符替换字符串中的特殊字符。

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

类似地,要撤消此操作,请使用urllib.parse.unquote:

urllib.parse。 unquote

  

用单字符等效项替换%xx转义。

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

(un)quote_plus

urllib.parse。 quote_plus

  

像quote()一样,但是也用加号替换空格,这是在构建查询字符串以进入URL时引用HTML表单值所必需的。

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