首页  >  文章  >  后端开发  >  如何在 Python 中正确编码 URL 参数:解决 `urllib.quote()` 和 `urllib.urlencode()` 的限制

如何在 Python 中正确编码 URL 参数:解决 `urllib.quote()` 和 `urllib.urlencode()` 的限制

Barbara Streisand
Barbara Streisand原创
2024-10-26 03:28:03191浏览

How to Properly Encode URL Parameters in Python:  Addressing Limitations of `urllib.quote()` and `urllib.urlencode()`

在 Python 中使用百分比编码对 URL 参数进行编码

当对 URL 参数进行百分比编码以防止错误并确保正确规范化时,内置的urllib.quote() 函数中可能会出现不足。

默认编码遗漏:

按如下方式使用 urllib.quote():

url = "http://example.com?p=" + urllib.quote(query)

省略将 / 等关键字符编码为 /,这会导致 OAuth 规范化出现问题。

Unicode 支持缺陷:

此外,它无法处理 Unicode 字符串,导致尝试编码非 ASCII 字符时出现异常。

使用 urllib.parse.quote() 和安全参数改进编码:

要解决这些限制,请使用 urllib。 Python 3 中的 parse.quote() 提供了一个解决方案:

urllib.parse.quote(string, safe='/', encoding=None, errors=None)

安全参数默认为 '/',但指定空字符串会禁用额外的 ASCII 字符排除,从而确保 / 的正确编码:

urllib.parse.quote('/test', safe='') # Encodes '/' to '%2F'

修复 Python 2 中的 Unicode 处理:

在 Python 2 中,urllib.quote() 存在 Unicode 处理错误。要解决此问题,请在应用百分比编码之前将字符串手动编码为 UTF-8:

query = urllib.quote(u"Müller".encode('utf8'))
print urllib.unquote(query).decode('utf8') # Outputs: Müller

替代方案: urllib.urlencode()

对于更简单的方法,考虑使用 urllib.urlencode(),它自动处理百分比编码和 Unicode:

encoded_params = urllib.urlencode({'p': query}) # Properly encodes '/' and supports Unicode

以上是如何在 Python 中正确编码 URL 参数:解决 `urllib.quote()` 和 `urllib.urlencode()` 的限制的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn