轉載自: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)、UnknownHandler、HTTPHandler、HTTPDefaultErrorHandler、HTTPRedirectHandler、FTPHandler、FileHandler、DataHandler、HTTPErrorProcessor。
實際上,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())
在這里使用了 ProxyHandler ,ProxyHandler 函數接受一個字典類型的參數,其中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 換成 MozillaCookieJar(CookieJar 的子類) ,用於生成文件。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(如果檢測到代理設置)、UnknownHandler、HTTPHandler、HTTPDefaultErrorHandler、HTTPRedirectHandler、FTPHandler、FileHandler、HTTPErrorProcessor。
如果 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 或基本身份的其他身份認證時,這個處理程序方法將提高 ValueError 3.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.HTTPSConnection 中 context 和 check_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 錯誤響應過程。