在 Python 中使用 Urlencode

Fariba Laiq 2023年10月10日
  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 包中直接訪問。

作者: 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