這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)urllib3怎么在python中使用,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
陽(yáng)谷網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司從2013年開(kāi)始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。Urllib3是一個(gè)功能強(qiáng)大,條理清晰,用于HTTP客戶(hù)端的Python庫(kù)。許多Python的原生系統(tǒng)已經(jīng)開(kāi)始使用urllib3。Urllib3提供了很多python標(biāo)準(zhǔn)庫(kù)urllib里所沒(méi)有的重要特性:
線(xiàn)程安全
連接池
客戶(hù)端SSL/TLS驗(yàn)證
文件分部編碼上傳
協(xié)助處理重復(fù)請(qǐng)求和HTTP重定位
支持壓縮編碼
支持HTTP和SOCKS代理
一、get請(qǐng)求
urllib3主要使用連接池進(jìn)行網(wǎng)絡(luò)請(qǐng)求的訪(fǎng)問(wèn),所以訪(fǎng)問(wèn)之前我們需要?jiǎng)?chuàng)建一個(gè)連接池對(duì)象,如下所示:
import urllib3 url = "http://httpbin.org" http = urllib3.PoolManager(); r = http.request('GET',url+"/get") print(r.data.decode()) print(r.status) 帶參數(shù)的get r = http.request('get','http://www.baidu.com/s',fields={'wd':'周杰倫'}) print(r.data.decode())
經(jīng)查看源碼:
def request(self, method, url, fields=None, headers=None, **urlopen_kw):
第一個(gè)參數(shù)method 必選,指定是什么請(qǐng)求,'get'、'GET'、'POST'、'post'、'PUT'、'DELETE'等,不區(qū)分大小寫(xiě)。
第二個(gè)參數(shù)url,必選
第三個(gè)參數(shù)fields,請(qǐng)求的參數(shù),可選
第四個(gè)參數(shù)headers 可選
request請(qǐng)求的返回值是
我們可以通過(guò)dir()查看其所有的屬性和方法。
dir(r)
直截取了一部分
#'data', 'decode_content', 'enforce_content_length', 'fileno', 'flush', 'from_httplib', # 'get_redirect_location', 'getheader', 'getheaders', 'headers', 'info', 'isatty', # 'length_remaining', 'read', 'read_chunked', 'readable', 'readinto', 'readline', # 'readlines', 'reason', 'release_conn', 'retries', 'seek', 'seekable', 'status', # 'stream', 'strict', 'supports_chunked_reads', 'tell', 'truncate', 'version', 'writable', # 'writelines']
二、post請(qǐng)求
import urllib3 url = "http://httpbin.org" fields = { 'name':'xfy' } http = urllib3.PoolManager() r = http.request('post',url+"/post",fields=fields) print(r.data.decode())
可以看到很簡(jiǎn)單,只是第一個(gè)參數(shù)get換成了post。
并且參數(shù)不需要再像urllib一樣轉(zhuǎn)換成byte型了。
三、設(shè)置headers
import urllib3 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36' } http = urllib3.PoolManager(); r = http.request('get',url+"/get",headers = headers) print(r.data.decode())
四、設(shè)置代理
import urllib3 url = "http://httpbin.org" headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36' } proxy = urllib3.ProxyManager('http://101.236.19.165:8866',headers = headers) r = proxy.request('get',url+"/ip") print(r.data.decode())
五、當(dāng)請(qǐng)求的參數(shù)為json
在發(fā)起請(qǐng)求時(shí),可以通過(guò)定義body 參數(shù)并定義headers的Content-Type參數(shù)來(lái)發(fā)送一個(gè)已經(jīng)過(guò)編譯的JSON數(shù)據(jù)
import urllib3 url = "http://httpbin.org" import json data = {'name':'徐繁韻'} json_data = json.dumps(data) http = urllib3.PoolManager() r = http.request('post',url+"/post",body = json_data,headers = {'Content-Type':'application/json'}) print(r.data.decode('unicode_escape'))
六、上傳文件
#元組形式 with open('a.html','rb') as f: data = f.read() http = urllib3.PoolManager() r = http.request('post','http://httpbin.org/post',fields = {'filefield':('a.html',data,'text/plain')}) print(r.data.decode()) #二進(jìn)制形式 r = http.request('post','http://httpbin.org/post',body = data,headers={'Content-Type':'image/jpeg'}) print(r.data.decode())
七、超時(shí)設(shè)置
# 1全局設(shè)置超時(shí) # http = urllib3.PoolManager(timeout = 3) # 2在request里設(shè)置 # http.request('post','http://httpbin.org/post',timeout = 3)
八、重試和重定向
import urllib3 http = urllib3.PoolManager() #重試 r = http.request('post','http://httpbin.org/post',retries = 5) #請(qǐng)求重試測(cè)次數(shù)為5次 ,默認(rèn)為3ci print(r.retries) #Retry(total=5, connect=None, read=None, redirect=0, status=None) #關(guān)閉重試 http.request('post','http://httpbin.org/post',retries = False) #請(qǐng)求重試測(cè)次數(shù)為5次 ,默認(rèn)為3ci r = http.request('get','http://httpbin.org/redirect/1',redirect = False) print(r.retries)# Retry(total=3, connect=None, read=None, redirect=None, status=None) print(r.status) print(r.data.decode()) print("--------------------") print(r.get_redirect_location()) #302不是異常
九、urllib3 本身設(shè)置了https的處理,但是有警告
雖然可以請(qǐng)求,但是報(bào)如下警告:
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
禁用警告:
import urllib3 urllib3.disable_warnings() #禁用各種警告 url = "https://www.12306.cn/mormhweb/" http = urllib3.PoolManager() r = http.request('get',url) print(r.data.decode())
上述就是小編為大家分享的urllib3怎么在python中使用了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。