Python 模塊 urllib.request

Python 模塊 urllib.request

Python 模塊 urllib.request 提供了對網絡資源的訪問,內置支持協議 HTTP(S),FTP和訪問本地文件系統,還可以創建新的協議類型或者為現有的協議添加新變量。

HTTP GET


HTTP GET 操作用於獲取服務器的內容,通常服務器會根據 URL 來確定返回的內容。使用模塊 urllib.request 的 urlopen() 方法,返回類似於文件 API 的一個對象,可以通過它的 read() 方法獲取服務器的內容。

首先使用 Python 內置的 http.server 模塊創建一個簡單的 HTTP 服務器。

Python 模塊 urllib.request

執行:

Python 模塊 urllib.request

上面綁定本地端口 8080,服務器開啟後,就可以接收請求了。可以使用瀏覽器或者使用 curl 查看一下服務器的輸出內容。

Python 模塊 urllib.request

只是簡單的輸出一個字符串 hello from server。

下面使用模塊 urllib.request 請求上面創建的 HTTP 服務器。

Python 模塊 urllib.request

執行:

Python 模塊 urllib.request

上例中,使用 urlopen() 方法發起 HTTP GET 請求,返回一個類似文件接口的對象。可以使用 read() 或者 readlines() 方法讀取服務器返回的內容。使用 info() 方法返回服務器的頭信息。

GET 請求添加參數


可以在鏈接 URL 添加參數傳遞給服務器,格式是在 URL 後面添加問號 ?,問號後面跟著一個或多個參數和值,例如 '?a=1&b=2' ,參數鍵和值使用等號 = 分隔,多個參數使用 & 分隔。

GET 請求的 URL 的參數是有長度限制的,不能超過 2048 個字節。

參數需要使用模塊 urllib.parse 進行編碼,它會轉換一些特殊字符,防止和 URL 的格式衝突,例如 urlencode() 把一個字典轉換成 URL 的格式,默認會把空格替換為 +,斜線 / 替換為 %2F。

Python 模塊 urllib.request

執行:

Python 模塊 urllib.request

HTTP POST


要發送一個使用表單編碼的數據到服務器,就要使用 HTTP 的 POST 方法了,POST 和 GET 方法的區別就是 POST 方法體現的是我要更改服務器上的某些設定,例如更新數據庫的某個字段,並且理論上 POST 要發送的數據大小是沒有限制的。

下面創建一個 HTTP 服務器,返回用戶 POST 請求的值。

Python 模塊 urllib.request

開啟服務器:

Python 模塊 urllib.request

先使用 curl 請求一個數據試試:

curl -X POST --data 'foo=1&p=2' http://localhost:8080

p=2

foo=1

可見,傳入到服務器的 POST 值都返回了,下面使用 urllib.request 發起請求。

Python 模塊 urllib.request

執行:

Python 模塊 urllib.request

添加額外的請求頭 Headers


方法 urlopen() 為我們提供了便利,同時也隱藏了一些細節。為了定製一個請求對象,例如添加特定的請求頭,可以自己構造一個 Request 實例,把我們的請求頭添加到實例上,然後調用請求方法。

Python 模塊 urllib.request

執行:

Python 模塊 urllib.request

構造 Request 實例時,可以通過 data 參數構造 POST 請求參數。此時請求方法就變為 POST 方法。

Python 模塊 urllib.request

執行:

Python 模塊 urllib.request


分享到:


相關文章: