1. 程式人生 > 其它 >Python3中Urllib庫是什麼?urllib模組基本使用

Python3中Urllib庫是什麼?urllib模組基本使用

轉載自:https://www.2cto.com/kf/201801/714859.html

什麼是 Urllib 庫?

urllib 庫 是 Python 內建的 HTTP 請求庫。urllib 模組提供的上層介面,使訪問 www 和 ftp 上的資料就像訪問本地檔案一樣。

有以下幾種模組:

1.urllib.request 請求模組

2. urllib.error 異常處理模組

3. urllib.parse url 解析模組

4. urllib.robotparser robots.txt 解析模組

Urllib 庫下的幾種模組基本使用如下:

urllib.request

關於 urllib.request

: urllib.request 模組提供了最基本的構造 HTTP (或其他協議如 FTP)請求的方法,利用它可以模擬瀏覽器的一個請求發起過程。利用不同的協議去獲取 URL 資訊。它的某些介面能夠處理基礎認證 ( Basic Authenticaton) 、redirections (HTTP 重定向)、 Cookies (瀏覽器 Cookies)等情況。而這些介面是由 handlers 和 openers 物件提供的。

一. urlopen
 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

引數說明

url:需要開啟的網址 data: Post 提交的資料, 預設為 None ,當 data 不為 None 時, urlopen() 提交方式為 Post timeout:設定網站訪問超時時間

下面是一個請求例項:

import urllib.request
# 可以是 from urllib import request,語句等價
response = urllib.request.urlopen('http://www.baidu.com')
print("檢視 response 響應資訊型別: ",type(response))
page = response.read()
print(page.decode('utf-8'))

輸出情況:

檢視 response 響應資訊型別:  

說明: 直接使用 urllib.request 模組中的 urlopen方法獲取頁面,其中 page 資料型別為 bytes 型別,經過 decode 解碼 轉換成 string 型別。通過輸出結果可以 urlopen 返回物件是 HTTPResposne 型別物件。

urlopen 返回一個類檔案物件,並提供瞭如下方法:

read() , readline() , readlines() , fileno() , close() :這些方法的使用方式與檔案物件完全一樣; info():返回一個httplib.HTTPMessage物件,表示遠端伺服器返回的頭資訊;可以通過Quick Reference to Http Headers檢視 Http Header 列表。 getcode():返回Http狀態碼。如果是http請求,200表示請求成功完成;404表示網址未找到; geturl():返回獲取頁面的真實 URL。在 urlopen(或 opener 物件)可能帶一個重定向時,此方法很有幫助。獲取的頁面 URL 不一定跟真實請求的 URL 相同。

使用例項

import urllib.request
response = urllib.request.urlopen('http://python.org/')
print("檢視 response 的返回型別:",type(response))
print("檢視反應地址資訊: ",response)
print("檢視頭部資訊1(http header):\n",response.info())
print("檢視頭部資訊2(http header):\n",response.getheaders())
print("輸出頭部屬性資訊:",response.getheader("Server"))
print("檢視響應狀態資訊1(http status):\n",response.status)
print("檢視響應狀態資訊2(http status):\n",response.getcode())
print("檢視響應 url 地址:\n",response.geturl())
page = response.read()
print("輸出網頁原始碼:",page.decode('utf-8'))

顯示輸出:限於幅度,可以自行測試。

關於 Post 資料

下面是一個 Post 例項

import urllib.request,urllib.parse
url = 'http://httpbin.org/post'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',
    'Referer': 'http://httpbin.org/post',
    'Connection': 'keep-alive'
    }
  # 模擬表單提交
dict = {
    'name':'MIka',
    'old:':18
}
data = urllib.parse.urlencode(dict).encode('utf-8')
\#data 數如果要傳bytes(位元組流)型別的,如果是一個字典,先用urllib.parse.urlencode()編碼。
req = urllib.request.Request(url = url,data = data,headers = headers)
response = urllib.request.urlopen(req)
page = response.read().decode('utf-8')
print(page)

註解
如例項易知,在 urlopen 引數 data 不為 None 時,urlopen() 資料提交方式 為 Post。urllib.parse.urlencode()方法將引數字典轉化為字串。
提交的網址是httpbin.org,它可以提供HTTP請求測試。 http://httpbin.org/post 這個地址可以用來測試 POST 請求,它可以輸出請求和響應資訊,其中就包含我們傳遞的 data 引數。

關於 timeout 引數
timeout引數可以設定超時時間,單位為秒,意思就是如果請求超出了設定的這個時間還沒有得到響應,就會丟擲異常,如果不指定,就會使用全域性預設時間。它支援 HTTP 、 HTTPS 、 FTP 請求。

相關例項

import urllib.request
response = urllib.request.urlopen("http://httpbin.org/get",timeout=1)
print(response.read().decode("utf-8"))

輸出結果

  "args": {}, 
  "headers": {
    "Accept-Encoding": "identity", 
    "Connection": "close", 
    "Host": "httpbin.org", 
    "User-Agent": "Python-urllib/3.6"
  }, 
  "origin": "119.137.62.237", 
  "url": "http://httpbin.org/get"
}

我們試著給timeout一個更小的值,例如timeout=0.1,此時丟擲 urllib.error.URLError 異常,錯誤原因為 time out 。因為常理下 0.1 s 內根本就不可能得到伺服器響應。所以通過設定引數 timeout 的值對於應對網頁響應的速度具有一定的意義。同時,可以通過設定這個超長時間來控制一個網頁如果長時間未響應就跳過它的抓取(可以通過try-catch 語句)。

try-catch 實現異常處理

import urllib.request
import  socket
import urllib.error
try:
    response = urllib.request.urlopen('http://httpbin.org/get',timeout=0.1)
except urllib.error.URLError as e:
    if  isinstance(e.reason, socket.timeout):
            print("Time out!")

輸出

Time out!

關於其他引數

Context 引數,必須是 ssl.SSL.Context 型別,用來指定 SSL 設定。cafile、capath 兩個引數是指定 CA 證書和它的路徑,在請求 HTTPS 連線時可能用的上。
cadefault 引數已經棄用,預設為 False。

二. Request
urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

使用request()來包裝請求,再通過urlopen()獲取頁面。單純使用 urlopen 並不能足以構建一個完整的請求,例如 對拉勾網的請求如果不加上 headers 等資訊,就無法正常解析訪問網頁內容。

下面是一個使用例項

import urllib.request
url = "http://www.lagou.com/zhaopin/Python/?labelWords=label"
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',
    'Referer': 'http://www.lagou.com/zhaopin/Python/?labelWords=label',
    'Connection': 'keep-alive'
}
req = request.Request(url, headers=headers)
page = request.urlopen(req).read()
page = page.decode('utf-8')
print(page)

headers 的引數設定:

User-Agent :這個頭部可以攜帶如下幾條資訊:瀏覽器名和版本號、作業系統名和版本號、預設語言。這個資料可以從 網頁開發工具上的請求反應資訊中獲取(瀏覽器上一般按 F12 開啟開發工具)。作用是用於偽裝瀏覽器。

Referer:可以用來防止盜鏈,有一些網站圖片顯示來源 http://*.com ,就是檢查 Referer 來鑑定的。

Connection:表示連線狀態,記錄 Session 的狀態。

origin_req_host:請求方的 host 名稱或者 IP 地址。

unverifiable:指請求無法驗證,預設為 False。使用者並沒有足夠的許可權來選擇接收這個請求結果,例如請求一個 HTML 文件中的圖片,但沒有自動抓取影象的許可權,這時 unverifiable 為 True。

method:指定請求使用的方法,例如 GET、POST、PUT 等。

三. Openers 和 Handlers

當需要獲取一個 URL 時需要使用一個 opener (這是一個不容易理解的物件—-urllib.request.OpenerDirector的例項)。一般情況下通過 urlopen 使用預設的 opener ,但允許自己建立不同的 opener 。Opener 會使用 handlers 。handler 承擔”重活”並知道如何以某個特定的協議(如http,ftp等)開啟 URL、知道如何處理 URL的某些行為(比如 Http 重定向或是 Cookie等)。

引入 Opener(即 OpenerDirector 類)的目的是為了能夠實現更高階的功能,一般情況下使用的 Request 、 urlopen() 相當於類庫封裝好了的極其常用的請求方法,利用這兩個就可以完成基本的請求。但當需要實現更高階的功能時就需要更高階的例項來完成操作。所以,這裡就用到了比呼叫 urlopen() 的物件的更普遍的物件—-Opener 。

Opener 通過 Handler 構建,可以使用 open() 方法,返回的型別和 urlopen() 相同。

OpenerDirector操作類是一個管理很多處理類(Handler)的類。這些 Handler 類都對應處理相應的協議,或者特殊功能。

分別有下面的處理類(即 Handler 類):
BaseHandler、HTTPErrorProcessor、HTTPDefaultErrorHandler、HTTPRedirectHandler、ProxyHandler、AbstractBasicAuthHandler、HTTPBasicAuthHandler、ProxyBasicAuthHandler、AbstractDigestAuthHandler、
ProxyDigestAuthHandler、AbstractHTTPHandler、HTTPHandler、HTTPCookieProcessor、UnknownHandler、
FileHandler、FTPHandler、CacheFTPHandler

其中,urllib.request.BaseHandler 是所有其他 Handler 的父類,其提供了最基本的Handler方法。例如:default_open()、protocol_request() 等。

常見的 BaseHandler 子類有:
* HTTPDefaultErrorHandler :用於處理HTTP響應錯誤,錯誤都會丟擲 HTTPError 型別的異常。
* HTTPRedirectHandler :用於處理重定向。
* HTTPCookieProcessor: 用於處理 Cookie 。
* ProxyHandler :用於設定代理,預設代理為空
* HTTPPasswordMgr : 用於管理密碼,它維護了使用者名稱密碼的表。
* HTTPBasicAuthHandler : 用於管理認證,如果一個連結開啟時需要認證,那麼可以用它來解決認證問題。 另外還

有其他的 Handler ,可以參考官方文件。

基本認證(Basic Authentication)

什麼是基本認證?當訪問網頁資訊時被要求需要認證(或授權)時,伺服器會發送一個頭資訊(如果驗證失敗便返回 401 錯誤程式碼)請求認證。它指定了一個realm(領域)。這個頭資訊的形式看起來會像是:www-Authenticate:SCHEME realm="REALM",例如WWW-Authenticate: Basic realm="cPanel Users"

接著,客戶端應該使用正確的使用者名稱和密碼重新請求(請求頭中應該包含對應的realm、使用者名稱以及使用者密碼),這就是“基礎認證”。

通過建立一個HTTPBasicAuthHandler並利用 opener 使用這個 handler 可以簡化這個認證過程。

HTTPBasicAuthHandler使用一個叫做密碼管理器(password manager)的物件處理 url 和 realm、使用者名稱和密碼之間的對映。如果你知道realm(領域)是什麼(根據伺服器傳送的認證 headers 可以得知),那麼你便可以使用HTTPPasswordMgr。人們往往不在乎realm是什麼。這種情況下,最方便的是使用HTTPPasswordMgrWithDefaultRealm。它允許你為一個url指定一個預設的使用者名稱和密碼。它會在你沒有給某個realm提供使用者名稱和密碼的時候起作用。這種情況下,需要將add_password方法的 realm 引數設定為 None。

頂層 URL (top-level URL)就是第一個需要認證的 URL,只有是比你傳遞給.add_password()的 URL更“深層”的 URL 也可以匹配得上。

下面是一個例項

# -*- coding: utf-8 -*-  
import urllib

# 建立一個密碼管理者  
password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()

# 新增使用者名稱和密碼  

top_level_url = "http://example.com/foo/"  

# 如果知道 realm, 我們可以使用他代替 ``None``.  
# password_mgr.add_password(None, top_level_url, username, password)  
password_mgr.add_password(None, top_level_url,'username','password')  

# 建立了一個新的handler  
handler = urllib.request.HTTPBasicAuthHandler(password_mgr)  

# 建立 "opener" (OpenerDirector 例項)  
opener = urllib.request.build_opener(handler)  

# 使用 opener 獲取一個URL  
a_url = 'http://www.python.org/'  
x = opener.open(a_url)  
print(x.read().decode("utf-8"))

# 安裝 opener.  
# 現在所有呼叫 urllib.request.urlopen 將用我們的 opener.  
urllib.request.install_opener(opener)  

此處程式碼為例項程式碼,用於說明Handler和Opener的使用方法。在這裡,首先例項化了一個HTTPPasswordMgrWithDefaultRealm物件,然後利用 add_password() 新增進使用者名稱和密碼,相當於建立了一個處理認證的處理器。接下來利用 urllib.request.build_opener() 方法來利用這個處理器構建一個 Opener ,那麼這個 Opener 在傳送請求的時候就具備了認證功能了。最後通過 Opener 的 open() 方法開啟 URL,即可以完成認證。

說明幾點
1.上面例項中,只將HTTPBasicAuthHandler提供給build_opener
2.預設情況下,opener可以處理一般情況的 handler—-ProxyHandler(已經設定了代理環境變數如 http_proxy)、UnknownHandlerHTTPHandlerHTTPDefaultErrorHandlerHTTPRedirectHandlerFTPHandlerFileHandlerDataHandlerHTTPErrorProcessor

實際上,toplevel_url 要麼是一個完整的 URL(包括“http:”模式部分以及主機名和可選的埠號)比如“http://example.com/”,要麼是一個“authority”(即主機名和可選的埠號)例如“example.com”或“example.com:8080”(後者包含了埠號)。該“authority”如果出現的話,不能包含“使用者資訊(userinfo)“元素——如“joe@password:example.com” 是不被允許的。

代理
urllib 可以通過ProxyHandler自動檢測你的代理設定並使用它們。當代理設定被檢測時,它是普通 handler 的一部分。通常認為這是好事,當有些情況它也可能沒有用。一個不用定義代理設定並使用它們的是建立自己的ProxyHandler。這個實現方法類似於建立一個基本認證 handler。

下面是一個例項

#! /usr/bin/env python3
import urllib.request
proxy_handler = urllib.request.ProxyHandler({
'socks5': 'localhost:1080',
'http': 'http://58.240.60.10:81',
'https': 'https://222.170.17.74:3128'
})
opener = urllib.request.build_opener(proxy_handler)
response = opener.open('https://www.baidu.com')
print(response.read())

在這裡使用了ProxyHandlerProxyHandler函式接受一個字典型別的引數,其中key為協議名稱,比如 http 還是 https 等,value為代理連結(包含 host 名稱與埠號),也支援帶驗證的代理,可以新增多個代理。然後利用 build_opener() 方法利用這個 Handler 構造一個 Opener ,然後傳送請求即可。

Cookie設定

獲取百度 Cookie 例項如下

#! /usr/bin/env python3
import http.cookiejar, urllib.request
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
for item in cookie:
   print(item.name+"="+item.value)

輸出

BAIDUID=37998CB10856532A8604B84ACFCAB6C0:FG=1
BIDUPSID=37998CB10856532A8604B84ACFCAB6C0
H_PS_PSSID=25576_1466_13289_21122_20928
PSTM=1516720556
BDSVRTM=0
BD_HOME=0

首先宣告一個CookieJar物件,接下來利用HTTPCookieProcessor構建一個 handler ,最後利用 build_opener 方法構建出 opener ,執行 open() 即可。

檢視輸出可以發現每一條 Cookie 有相應的名稱和值。

文字儲存 Cookie 資訊例項如下

filename = 'cookie.txt'
cookie = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)

cookie.txt 檔案內容為

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.

.baidu.com  TRUE    /   FALSE   3664204558  BAIDUID 43896422C89528C1D912D69D7AA9CF49:FG=1
.baidu.com  TRUE    /   FALSE   3664204558  BIDUPSID    43896422C89528C1D912D69D7AA9CF49
.baidu.com  TRUE    /   FALSE       H_PS_PSSID  1458_21084_17001_20718
.baidu.com  TRUE    /   FALSE   3664204558  PSTM    1516720911
www.baidu.com   FALSE   /   FALSE       BDSVRTM 0
www.baidu.com   FALSE   /   FALSE       BD_HOME 0

相對單純輸出 Cookie ,這裡CookieJar換成MozillaCookieJarCookieJar的子類) ,用於生成檔案。MozillaCookieJar可以用來處理 Cookie 以及和檔案相關的事件,比如讀取和儲存 Cookie ,同時它可以將 Cookie 儲存成 Mozilla 型的格式。

此外,還有一個LWPCookieJar,同樣可以讀取和儲存 Cookie ,但是儲存的格式和MozillaCookieJar的不一樣,它會儲存成 libwww-perl 的 Set-Cookie3 檔案格式的 Cookie 。

嘗試一下,修改宣告 cookie = http.cookiejar.LWPCookieJar(filename)
新cookie.txt 檔案內容為

#LWP-Cookies-2.0
Set-Cookie3: BAIDUID="CDA35482887BF4DEAA078F12CD69DDD8:FG=1"; path="/"; domain=".baidu.com"; path_spec; domain_dot; expires="2086-02-10 18:47:45Z"; version=0
Set-Cookie3: BIDUPSID=CDA35482887BF4DEAA078F12CD69DDD8; path="/"; domain=".baidu.com"; path_spec; domain_dot; expires="2086-02-10 18:47:45Z"; version=0
Set-Cookie3: H_PS_PSSID=25641_1424_21108_17001; path="/"; domain=".baidu.com"; path_spec; domain_dot; discard; version=0
Set-Cookie3: PSTM=1516721618; path="/"; domain=".baidu.com"; path_spec; domain_dot; expires="2086-02-10 18:47:45Z"; version=0
Set-Cookie3: BDSVRTM=0; path="/"; domain="www.baidu.com"; path_spec; discard; version=0
Set-Cookie3: BD_HOME=0; path="/"; domain="www.baidu.com"; path_spec; discard; version=0

以下為以 LWPCookieJar 格式為例實現對 Cookie 檔案的讀取與利用:

cookie = http.cookiejar.LWPCookieJar()
cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))

前提是先利用上面的方式生成了LWPCookieJar格式的 Cookie 檔案 ,然後利用 load() 方法,傳入檔名稱,構建 handler 和 opener 並能夠正常輸出百度網頁的原始碼。

以上是關於 urllib.request 模組的常用知識以及重點內容的總結, 還具體說明了 urllib.request,urlopen() 的詳細介紹以及用法。可以檢視 python doc 。

下面是 urllib.request 模組的其他 方法或者類的簡要介紹:
方法
1. install_opener()

urllib.request.install_opener(opener)

安裝一個 OpenerDirector例項作為全球預設的opener 。如果你想讓 urlopen 使用這個opener,那麼安裝一個opener是必要的;否則可以簡單地呼叫OpenerDirector.open()而不是urlopen()。這樣程式碼不會檢查一個真實的 OpenerDirector 並且任何類的適當的介面都可以運作。

2.build_opener()

urllib.request.build_opener([handler, …])

返回一個順序鏈的處理程式OpenerDirector的例項。處理程式可以是BaseHandler的例項,或者BaseHandler的子類(在這種情況下,必須呼叫沒有引數的建構函式)。下面這些類的例項將提前處理程式,除非處理程式包含它們,或者它們子類的例項:ProxyHandler(如果檢測到代理設定)、UnknownHandlerHTTPHandlerHTTPDefaultErrorHandlerHTTPRedirectHandlerFTPHandlerFileHandlerHTTPErrorProcessor

如果 Python 安裝 SSL 支援(即如果 ssl 模組可以被匯入),HTTPSHandler也將被新增。

一個BaseHandler子類也可以通過改變它的 handler_order 屬性來修改它再處理程式列表中的位置。

3.pathname2url()

urllib.request.pathname2url(path)

將路徑名轉換成路徑,從本地語法形式的路徑中使用一個URL的路徑組成部分。這不會產生一個完整的URL。它將返回引用 quote() 函式的值。

4.url2pathname()

urllib.request.url2pathname(path)

將路徑元件轉換為本地路徑的語法。這個不接受一個完整的URL。這個函式使用 unquote() 解碼的通路。

5.getproxies()

urllib.request.getproxies()

這個 helper 函式返回一個日程表 dictionary 去代理伺服器的 URL 對映。掃描指定的環境變數 _proxy 大小寫不敏感的方法,對所有的作業系統,當它不能找到它,從 Mac OS X 的 Mac OSX 系統配置和 Windows 系統登錄檔中尋找代理資訊。如果兩個大寫和小寫環境變數存在(或不一樣),小寫優先。

請注意,如果環境變數 REQUEST_METHOD 已被設定,這通常表明你在 CGI 指令碼執行環境,此時環境變數 HTTP_PROXY(大寫 _PROXY) 將被忽略。這是因為該變數可以被客戶端使用注射 “代理:” HTTP 頭。如果你需要使用一個 HTTP 代理在 CGI 環境中,要麼使用ProxyHandler明確,或者確保變數名小寫(或至少是 _proxy字尾)。

urllib.request.Request(url,data=None,headers={}, origin_req_host=None, unverifiable=False, method=None)

1.這個類是一個抽象的 URL 請求。

2.url 應該是一個字串包含一個有效的 URL 。

3.資料必須是一個位元組物件指定額外的資料傳送到伺服器 或 None。如果沒有這樣的資料是必要的,資料也可能是一個 iterable 物件而且在這種情況下必須在最開始時指定內容的長度。目前 HTTP 是唯一一個這樣請求資料的,當資料引數被提供時,HTTP 請求將會執行 POST 請求而不是 GET 請求。

4.資料應該是一個緩衝的在標準應用程式中以x-www-form-urlencoded的格式。urllib.parse.urlencode()函式接受一個對映或序列集合,並返回一個 ASCII 文字字串的格式。它應該在被用作資料引數之前,被編碼為位元組。

5.headers 應該是一個字典,如果 add_header() 被稱為與每個鍵和值作為引數。這通常是用來“惡搞” User-Agent 頭的值,因為使用一個瀏覽器識別本身——一些常見HTTP伺服器只允許請求來自瀏覽器而不是指令碼。例如,Mozilla Firefox可能識別本身 “Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11”。而 urllib 預設的使用者代理字串 是”Python-urllib/2.6”在Python 2.6()。

6.一個Content-Type header的例子: 用資料論證將傳送一個字典 {“Content-Type”:”application/x-www-form-urlencoded”}。

7.最後兩個引數只是正確處理第三方 HTTP cookie:
origin_req_host應該請求原始的主機交易,就像定義的 RFC 2965。它預設為 http.cookiejar.request_host(self)。這是原始請求的主機名或 IP 地址,由使用者發起。例如。如果請求是一個影象在 HTML文件中,這應該是請求的請求主機包含影象的頁面。

8.無法核實的表明是否應該請求是無法核實的,這由 RFC 2965 定義。它預設為 False。一個無法核實的請求的 URL 的使用者沒有允許的選擇。例如,如果請求是一個影象在一個HTML文件,和使用者沒有選擇通過影象的自動抓取,這應該是正確的。

9.這個方法應該是一個字串,表示將使用(如 headers 請求頭部資訊)。如果提供,其值是儲存在 method 屬性和使用 get_method()。通過設定子類可能表明一個預設的方法 method類 本身的屬性。

urllib.request.OpenerDirector

OpenerDirector類開啟 url 並通過BaseHandler連線在一起。它管理處理程式的連線,和恢復錯誤。

urllib.request.BaseHandler

這是對於所有已註冊的處理程式的基類。

urllib.request.HTTPRedirectHandler

一個類來處理重定向。

urllib.request.HTTPCookieProcessor(cookiejar=None)

一個類來處理HTTP cookie。

urllib.request.ProxyHandler(proxies=None)

導致請求通過一個代理。如果代理是給定的,它必須是一個字典的代理協議名稱對映到 ur l。預設值是從環境變數的列表 _proxy 中讀取代理。如果沒有代理設定環境變數,那麼在 Windows 環境中代理設定了從登錄檔部分的網路設定,在 Mac OS X 環境代理資訊檢索的 OS X 系統配置框架。
禁用一個代理傳遞一個空的字典。
no_proxy 環境變數可以被用來指定主機不能通過代理;如果設定,它應該是一個以逗號分隔的主機名字尾。可選 :port 附加為例 cern.ch,ncsa.uiuc.edu,some.host:8080。

請注意:HTTP_PROXY 如果一個變數將被忽略 REQUEST_METHOD 設定;參見文件 getproxies()。

urllib.request.HTTPPasswordMgr

保持一個(realm, uri) -> (user, password) 對映的資料庫 。

urllib.request.HTTPPasswordMgrWithDefaultRealm

保持一個 (realm, uri) -> (user, password) 對映的資料庫 。如果沒有其他搜尋領域,一個值為 None 的領域 (realm) 被認為是一個全方位領域。

urllib.request.HTTPPasswordMgrWithPriorAuth

保持一個HTTPPasswordMgrWithDefaultRealm變數 還有一個uri -> is_authenticated 對映的資料庫 。當傳送身份認證可以馬上使用 BasicAuth handler 確認身份, 而不是等待 401 報錯響應。

urllib.request.AbstractBasicAuthHandler(password_mgr=None)

這是 mixin 類,處理遠端主機身份認證和代理。使用 is_authenticated 值對於一個給定的URI 來決定是否傳送請求來進行身份認證。如果 s_authenticated 返回 True 則傳送憑證。如果 is_authenticated 是 False ,則憑證不傳送。如果 返回 401 錯誤響應資訊,則身份認證失敗。如果身份驗證成功, update_authenticated 被稱為設定 True。

urllib.request.HTTPBasicAuthHandler(password_mgr=None)

處理遠端主機的身份認證。

urllib.request.ProxyBasicAuthHandler(password_mgr=None)

處理身份認證與代理。

urllib.request.AbstractDigestAuthHandler(password_mgr=None)

這是 mixin 類,處理遠端主機身份認證和代理。

urllib.request.HTTPDigestAuthHandler(password_mgr=None)

實現遠端主機的身份認證。如果有password_mgr,應該是相容HTTPPasswordMgr的;請參閱章節HTTPPasswordMgr以獲取很多介面資訊。Digest認證處理器和基本認證處理器都被加入,Digest認證處理器總是首先進行驗證。如果主機再次返回一個40X 響應,它傳送到基本認證處理器進行處理。當出現除了 Digest 或基本身份的其他身份認證時,這個處理程式方法將提高ValueError3.3版本的變化:提高 ValueError不支援的身份驗證方案。

urllib.request.ProxyDigestAuthHandler(password_mgr=None)

處理代理身份的驗證。如果有password_mgr,應該是相容HTTPPasswordMgr的;請參閱章節HTTPPasswordMgr獲取更多介面資訊。

urllib.request.HTTPHandler

處理HTTP URLs。

urllib.request.HTTPSHandler(debuglevel=0, context=None, check_hostname=None)

處理開放的 HTTPS URLs 。在http.client.HTTPSConnectioncontextcheck_hostname有相同的意義 。

urllib.request.FileHandler

開啟本地檔案。

urllib.request.DataHandler

開放資料 URLs。

urllib.request.FTPHandler

開放的 FTP URLs。

urllib.request.CacheFTPHandler

開啟 FTP URLS,保持開啟的 FTP 連線快取來減少延遲。

urllib.request.UnknownHandler

全方位類處理未知的 URLs。

urllib.request.HTTPErrorProcessor

HTTP 錯誤響應過程。