如何在 Python 中对 URL 参数进行百分比编码?
- 2025-01-17 09:22:00
- admin 原创
- 12
问题描述:
如果我这么做
url = "http://example.com?p=" + urllib.quote(query)
它不编码
/
(%2F
破坏 OAuth 规范化)它不处理 Unicode(它会引发异常)
有没有更好的图书馆?
解决方案 1:
来自Python 3 文档:
urllib.parse.quote(string, safe='/', encoding=None, errors=None)
使用转义替换字符串中的特殊字符
%xx
。字母、数字和字符'_.-~'
从不加引号。默认情况下,此函数用于引用 URL 的路径部分。可选的 safe 参数指定不应加引号的其他 ASCII 字符 —其默认值为'/'
。
这意味着通过''
安全将解决您的第一个问题:
>>> import urllib.parse
>>> urllib.parse.quote('/test')
'/test'
>>> urllib.parse.quote('/test', safe='')
'%2Ftest'
(在 Python 3 中,该函数quote
从 移至urllib
。 )urllib.parse
顺便看看urlencode。
关于第二个问题,有一个关于它的错误报告,并且已在 Python 3 中修复。
对于 Python 2,您可以通过编码为UTF-8来解决这个问题,如下所示:
>>> query = urllib.quote(u"Müller".encode('utf8'))
>>> print urllib.unquote(query).decode('utf8')
Müller
解决方案 2:
在 Python 3 中,urllib.quote
已移至,并且它默认urllib.parse.quote
处理Unicode 。
>>> from urllib.parse import quote
>>> quote('/test')
'/test'
>>> quote('/test', safe='')
'%2Ftest'
>>> quote('/El Niño/')
'/El%20Ni%C3%B1o/'
解决方案 3:
我认为模块requests
好得多。它基于urllib3
。
您可以尝试以下操作:
>>> from requests.utils import quote
>>> quote('/test')
'/test'
>>> quote('/test', safe='')
'%2Ftest'
我的回答和Paolo 的回答类似。
解决方案 4:
如果您使用Django,则可以使用urlquote:
>>> from django.utils.http import urlquote
>>> urlquote(u"Müller")
u'M%C3%BCller'
请注意,对 Python 的更改意味着这现在是一个遗留包装器。从 Django 2.1 源代码中的django.utils.http:
A legacy compatibility wrapper to Python's urllib.parse.quote() function.
(was used for unicode handling on Python 2)
解决方案 5:
最好urlencode
在这里使用它。单个参数没有太大区别,但恕我直言,它使代码更清晰。(函数看起来很混乱quote_plus
!——尤其是那些来自其他语言的人。)
In [21]: query='lskdfj/sdfkjdf/ksdfj skfj'
In [22]: val=34
In [23]: from urllib.parse import urlencode
In [24]: encoded = urlencode(dict(p=query,val=val))
In [25]: print(f"http://example.com?{encoded}")
http://example.com?p=lskdfj%2Fsdfkjdf%2Fksdfj+skfj&val=34
文档
urlencode
quote_plus
解决方案 6:
使用furl的另一种方法:
import furl
url = "https://httpbin.org/get?hello,world"
print(url)
url = furl.furl(url).url
print(url)
输出:
https://httpbin.org/get?hello,world
https://httpbin.org/get?hello%2Cworld
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
热门标签
云禅道AD