在 Python 中使用 Urlencode

Fariba Laiq 2023年1月30日 2022年5月18日
  1. 在 Python 中使用 urlencode() 对字典进行 URL 编码
  2. 在 Python 中使用 urlencode() 对多值字典进行 URL 编码
  3. 在 Python 3 中使用 urlencode() 函数
  4. 使用 urllib.parse.quote_plus() 函数在 Python 3 中引用和编码 URL
  5. 在 Python 3 中使用 urllib.parse.quote() 函数引用和编码 URL
在 Python 中使用 Urlencode

URL 代表统一资源定位器。URL 只是通过浏览器请求网页加载的 URL 的 Web 上资源的地址。

URL 编码是使用有限的 US-ASCII 将字符转换为特殊格式的过程,它被所有浏览器和 Web 服务器普遍接受。

如果 URL 包含定义的 ASCII 字符集以外的字符,这些字符将被转换为有效的 ASCII 格式。它也被称为百分比编码,因为我们经常在 URL 中看到百分比符号。

每当我们调用 Web API 或提交 HTTP 表单数据时,我们都会使用编码的 URL 来编码查询字符串。在 Python 中,我们可以使用 urlib.parse 模块对查询字符串进行 URL 编码,该模块还包含一个函数 urlencode() 用于在 URL 中编码查询字符串。查询字符串只是一串键值对。

在 Python 中使用 urlencode() 对字典进行 URL 编码

如果我们想使用 urlencode() 函数对字符串进行 URL 编码,我们不能直接这样做,因为它不接受字符串作为参数。我们可以以字典的形式传递参数。字典是 Python 中的一种数据类型,将数据存储在键值对中。

例如,我们有一个这样的查询字符串:

queryString = 'name=' + 'Jhon' + '&' + 'age=' + '18'

首先我们必须把它写成这样的字典格式:

queryString = { 'name' : 'Jhon', 'age' : '18'}

在下面的代码中,我们必须导入 urlib 库,并将查询字符串传递给 urlib 库的 parse 模块的 urlencode() 函数。在输出中,我们将获得所需的编码 URL。

在输出中,编码的 URL 将采用+ 符号替换空格的形式,:符号将替换为&符号,因为它是查询字符串的编码 URL 的格式。

示例代码:

#python 3.x
import urllib
queryString = { 'name' : 'Jhon', 'age' : '18'}
urllib.parse.urlencode(queryString)

输出:

#python 3.x
'age=18&name=Jhon'

在 Python 中使用 urlencode() 对多值字典进行 URL 编码

现在假设我们的查询字符串是字典形式的,它包含多值数据,例如名为颜色的属性,其值为 bluepinkgreen,因此它是一个多值属性。我们还可以在 Python 中对此类字典进行 URL 编码。

urlencode() 函数采用可选参数 doseq。如果我们将其值设置为 True,我们可以避免输出中出现特殊字符。

示例代码:

import urllib
queryString = { 'jeans' : 'Bell Bottom', 'colors' : ['blue', 'pink', 'green']}
urllib.parse.urlencode(queryString, doseq=True)

输出:

'jeans=Bell+Bottom&colors=blue&colors=pink&colors=green'

在 Python 3 中使用 urlencode() 函数

我们可以使用 Python 中的 urlencode() 函数对不同的参数进行编码。我们可以将函数中的查询作为字典的键值对或作为具有两个元素的元组列表传递,以使用此函数执行编码。

字符 _-.~、字母和数字不被引用。

在 Python 2 中,这直接是 urllib 模块的一部分。最终结果是一个字符串。

例如:

import urllib
query = urllib.urlencode({'www.delftstack.com': 20,  'string': 10})
print (query)

输出:

www.delftstack.com=20&string=10

上面的代码适用于 Python 2。

在 Python 3 中,urllib 被拆分为不同的子模块。urlencode() 函数已成为 urllib.parse 模块的一部分。

我们可以通过从这个库中导入方法来使用这个函数。

例如:

import urllib.parse
query = urllib.parse.urlencode({'www.delftstack.com': 20,  'string': 10})
print(query)

输出:

www.delftstack.com=20&string=10

urlencode() 函数在内部使用 quote_plus() 方法来执行编码。我们可以使用 quote_via 参数来更改它。

urlencode 函数有两个重要参数,encodingsafe。我们可以使用 safe 参数从引用中指定安全的 ASCII 字符。

此参数的默认值为\ 字符。encoding 参数接受编码类型来处理非 ASCII 字符。

使用 urllib.parse.quote_plus() 函数在 Python 3 中引用和编码 URL

我们可以使用 urllib.parse.quote_plus() 函数将 URL 中的特殊字符和空格替换为字符串中的 + 符号。默认情况下,此函数用于 urlencode() 函数。

请参阅下面的代码。

import urllib.parse
query = urllib.parse.quote_plus('delftstack$urllib')
print(query)

输出:

delftstack%24urllib

我们可以在 Python 2 中直接在 urllib 包下访问此函数。

在 Python 3 中使用 urllib.parse.quote() 函数引用和编码 URL

urllib.parse.quote() 函数接受一个字符串并将特殊字符替换为 %xx。它还接受前面函数中提到的参数。

例如:

import urllib.parse
query = urllib.parse.quote('delftstack$urllib')
print(query)

输出:

delftstack%24urllib

我们可以在内部使用这个函数和 urlencode() 函数,绕过 urllib.parse.quote 函数作为 quote_via 参数的值。

这个函数也可以在 Python 2 的 urllib 包中直接访问。

Author: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

相关文章 - Python URL