无法在 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 客户端进行身份验证