python?requests模塊封裝詳解
一、requests簡(jiǎn)介
requests是一個(gè)常用的HTTP請(qǐng)求庫(kù),可以方便地向網(wǎng)站發(fā)送HTTP請(qǐng)求,并獲取響應(yīng)結(jié)果; requests模塊比 urllib 模塊更簡(jiǎn)潔;使用 requests發(fā)送HTTP請(qǐng)求需要先導(dǎo)入requests模塊,導(dǎo)入后就可以發(fā)送HTTP請(qǐng)求,使用requests提供的方法向指定url發(fā)送HTTP請(qǐng)求
關(guān)于python開(kāi)發(fā)的HTTP庫(kù),在Python內(nèi)置模塊的基礎(chǔ)上進(jìn)行了高度的封裝,從而使得Pythoner進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí),變得美好了許多,使用requests可以完成瀏覽器任何操作
二、請(qǐng)求類(lèi)型
HTTP的請(qǐng)求類(lèi)型有POST、GET、PUT、DELETE、HEAD以及OPTIONS,其中POST和GET是最常使用的
三、使用demo
# 導(dǎo)入requests包 import?requests # 發(fā)送請(qǐng)求 response?=?requests.get('https://www.runoob.com/') # 返回網(wǎng)頁(yè)內(nèi)容 print(response.text)
注意:每次調(diào)用requests請(qǐng)求之后,會(huì)返回一個(gè)response對(duì)象,該對(duì)象包含了具體的響應(yīng)信息,如狀態(tài)碼、響應(yīng)頭、響應(yīng)內(nèi)容等:
- response.text:獲取文本響應(yīng)內(nèi)容,即網(wǎng)頁(yè)源代碼(str格式)
- response.context:獲取二進(jìn)制響應(yīng)內(nèi)容,即網(wǎng)頁(yè)源代碼(bytes格式)
- response.json():獲取JSON響應(yīng)內(nèi)容
- response.raw:獲取原始響應(yīng)內(nèi)容
- response.status_code:響應(yīng)狀態(tài)碼,返回值為200表示網(wǎng)絡(luò)請(qǐng)求正常
- response.encoding:編碼方式
- response.apparent_encoding:從內(nèi)容中分析出的響應(yīng)內(nèi)容編碼方式
- response.request:請(qǐng)求對(duì)象;主要包括url、method、headers等
- response.url:輸出請(qǐng)求的網(wǎng)址鏈接
print(response.status_code) # 獲取響應(yīng)狀態(tài)碼 print(response.headers) # 獲取響應(yīng)頭 print(response.content) # 獲取響應(yīng)內(nèi)容
四、個(gè)人風(fēng)格requests封裝
import retrying # 需手動(dòng)安裝 class HTTP(object): """ requests模塊封裝使用: import HTTP # post調(diào)用時(shí)格式為json格式 headers = { "Content-Type": "application/json", "Charset": "UTF-8" } result = HTTP.get(url, params) result = HTTP.post(url, data=json.dumps(payload), headers=header) """ @staticmethod def __requests(method, url, **kwargs): """ 發(fā)送http請(qǐng)求 @param url: 接口url @param method: http請(qǐng)求方法 @param kwargs: 接受request原生的關(guān)鍵字參數(shù) @return 響應(yīng)對(duì)象 """ resp = getattr(requests, method)(url, **kwargs) if resp.status_code == 200: result = resp.json() return result raise Exception('fail:{},url:{},method:{}'.format(json.dumps(resp.content),url,method)) @retrying.retry(stop_max_attempt_number=3) def get(self, url, params=None, **kwargs): return self.__requests('get', url, params=params, **kwargs) @retrying.retry(stop_max_attempt_number=3) def post(self, url, data, **kwargs): return self.__requests('post', url, data=data, **kwargs) @retrying.retry(stop_max_attempt_number=3) def put(self, url, data=None, **kwargs): return self.__requests('put', url, data=data, **kwargs) @retrying.retry(stop_max_attempt_number=3) def delete(self, url, **kwargs): return self.__requests('delete', url, **kwargs) @retrying.retry(stop_max_attempt_number=3) def head(self, url, **kwargs): return self.__requests('head', url, **kwargs) @retrying.retry(stop_max_attempt_number=3) def patch(self, url, data=None, **kwargs): return self.__requests('patch', url, data=data, **kwargs)
五、實(shí)例demo
GET請(qǐng)求
在URL中常見(jiàn)?符號(hào),httpbin.org/get?key=val
這種帶有?傳遞關(guān)鍵字參數(shù)的方式,requests可以通過(guò)params實(shí)現(xiàn)
condition_params = {'k1':'v1', 'k2':'v2', 'k3':None, 'k4':['v4','v5']} r = requets.get('http://httpbin.org/get', params=condition_params)
注意:
- 字典中鍵值為None的鍵不會(huì)被拼接添加到url中
- 多個(gè)鍵值中間用&符號(hào)拼接
- 鍵值可是列表例如上例中'k4'
- 執(zhí)行結(jié)果print(r.url) -->
httpbin.org/get?k1=v1&k…
POST請(qǐng)求
import requests import json # 指定post請(qǐng)求時(shí)的url url = 'https://api.github.com/some/endpoint' # 需要上傳或發(fā)送post請(qǐng)求的數(shù)據(jù) payload = {'some': 'data'} # 指定請(qǐng)求格式為json格式 headers = {'content-type': 'application/json'} # 發(fā)送請(qǐng)求時(shí)將字典轉(zhuǎn)換為json格式數(shù)據(jù) res = requests.post(url, data=json.dumps(payload), headers=headers)
到此這篇關(guān)于python requests模塊封裝詳解的文章就介紹到這了,更多相關(guān)python requests內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python下載安裝requests庫(kù)的簡(jiǎn)單步驟
- Python之requests高級(jí)用法詳解
- Python爬蟲(chóng)之requests基礎(chǔ)用法詳解
- Python爬蟲(chóng)之Requests庫(kù)基本使用詳解
- Python發(fā)送網(wǎng)絡(luò)請(qǐng)求(requests)
- Python網(wǎng)絡(luò)請(qǐng)求之Requests庫(kù)的高級(jí)功能運(yùn)用
- Python網(wǎng)絡(luò)請(qǐng)求使用Requests庫(kù)抓取解析數(shù)據(jù)
- Python中的HTTP請(qǐng)求庫(kù)Requests的具體使用
相關(guān)文章
python中列表(list)和元組(tuple)的深入講解
這篇文章主要給大家介紹了關(guān)于python中列表(list)和元組(tuple)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03python Django連接MySQL數(shù)據(jù)庫(kù)做增刪改查
本文寫(xiě)的是python Django連接MySQL數(shù)據(jù)庫(kù)的步驟,提供增刪改查的代碼2013-11-11Python利用contextvars實(shí)現(xiàn)管理上下文變量
Python?在?3.7?的時(shí)候引入了一個(gè)模塊:contextvars,從名字上很容易看出它指的是上下文變量。所以本文就來(lái)和大家詳細(xì)講講如何使用contextvars實(shí)現(xiàn)管理上下文變量,需要的可以參考一下2022-07-07Python編寫(xiě)一個(gè)多線(xiàn)程的12306搶票程序的示例
對(duì)于很多人來(lái)說(shuō),搶購(gòu)火車(chē)票人們成了一個(gè)令人頭疼的問(wèn)題,本文主要介紹了Python編寫(xiě)一個(gè)多線(xiàn)程的12306搶票程序的示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09Python導(dǎo)入Excel數(shù)據(jù)表的幾種實(shí)現(xiàn)方式
在Python中可以使用許多庫(kù)來(lái)處理Excel文件,下面這篇文章主要給大家介紹了關(guān)于Python導(dǎo)入Excel數(shù)據(jù)表的幾種實(shí)現(xiàn)方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01將Django項(xiàng)目遷移到linux系統(tǒng)的詳細(xì)步驟
這篇文章主要介紹了將Django項(xiàng)目遷移到linux系統(tǒng)的詳細(xì)步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03使用selenium和pyquery爬取京東商品列表過(guò)程解析
這篇文章主要介紹了使用selenium和pyquery爬取京東商品列表過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08詳解python中的三種命令行模塊(sys.argv,argparse,click)
這篇文章主要介紹了python中的三種命令行模塊(sys.argv,argparse,click)的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12