无法在 python 中对 URL 进行 urllib.urlencode

Posted

技术标签:

【中文标题】无法在 python 中对 URL 进行 urllib.urlencode【英文标题】:cannot urllib.urlencode a URL in python 【发布时间】:2011-12-08 02:37:03 【问题描述】:

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

【问题讨论】:

【参考方案1】:

那不是那个函数的作用:

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

你在找吗?

urllib.quote(callback)Python 2 urllib.parse.quote(callback)Python 3

【讨论】:

此答案仅适用于 Python 2。对于 Python 3,它是 urllib.parse.quote。可以加个附录吗? 伟大的答案,拯救了我的一天【参考方案2】:

Python 3

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

一些例子:

(未)引用

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'

【讨论】:

【参考方案3】:

Python 不是 php。你想要urllib.quote()

【讨论】:

这对我很有帮助。这让我看得更近了。因为我来自php。【参考方案4】:

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'

【讨论】:

以上是关于无法在 python 中对 URL 进行 urllib.urlencode的主要内容,如果未能解决你的问题,请参考以下文章

无法在 python 中对 Google Cloud Storage 客户端进行身份验证

如何在 django rest 框架中对项目的删除 url 进行 url-reverse

如何只允许数字作为输入? - Python [重复]

如何在 WinForms 中对 URL 进行编码?

python中对url编码解码处理

如何在python中对没有标题的大型csv信号文件进行分类?