urlopen簡介
urlopen是urllib.request模塊提供的最基本的構造HTTP請求的方法,可以模擬瀏覽器的一個請求發起過程,同時還支持授權驗證(authentication)、重定向(redirection)、瀏覽器Cookies以及其他內容。
使用方法為urllib.request.urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=False,context=None)
基礎用法urlopen()
我們只指定url一個參數,如下面的:https://www.baidu.com。
默認使用GET方式對網站發起請求。
import urllib.request response = urllib.request.urlopen('https://www.baidu.com') print(response.read().decode('utf8'))
urlopen返回的response對象是http.client. HTTPResponse類型,主要包含read()、readinfo()、getheader(name)、getheaders()、fileno()等方法。
data參數
data參數是可選的,並且是字節流編碼格式(可以用urllib.parse.urlencode()和bytes()方法將參數轉化為字節流編碼格式的內容)。如果要使用data參數,則請求方式為POST。
import urllib.parse import urllib.request data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8') response = urllib.request.urlopen('http://httpbin.org/post', data=data) print(response.read().decode('utf8'))
timeout參數
timeout參數用於設置超時,單位為秒,若不指定timeout,則使用全局默認時間。若請求超時,則會拋出urllib.error.URLError異常,可以通過try except處理異常。
import socket import urllib.request 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')
其他參數
context參數必須是ssl.SSLContent類型,用來指定設置SSL。
cafile和capath分別指定CA證書和它的路徑,在HTTPS中有用。
cadefault已經棄用,默認default。