python?requests模塊封裝詳解
一、requests簡介
requests是一個常用的HTTP請求庫,可以方便地向網站發(fā)送HTTP請求,并獲取響應結果; requests模塊比 urllib 模塊更簡潔;使用 requests發(fā)送HTTP請求需要先導入requests模塊,導入后就可以發(fā)送HTTP請求,使用requests提供的方法向指定url發(fā)送HTTP請求
關于python開發(fā)的HTTP庫,在Python內置模塊的基礎上進行了高度的封裝,從而使得Pythoner進行網絡請求時,變得美好了許多,使用requests可以完成瀏覽器任何操作
二、請求類型
HTTP的請求類型有POST、GET、PUT、DELETE、HEAD以及OPTIONS,其中POST和GET是最常使用的
三、使用demo
# 導入requests包
import?requests
# 發(fā)送請求
response?=?requests.get('https://www.runoob.com/')
# 返回網頁內容
print(response.text)注意:每次調用requests請求之后,會返回一個response對象,該對象包含了具體的響應信息,如狀態(tài)碼、響應頭、響應內容等:
- response.text:獲取文本響應內容,即網頁源代碼(str格式)
- response.context:獲取二進制響應內容,即網頁源代碼(bytes格式)
- response.json():獲取JSON響應內容
- response.raw:獲取原始響應內容
- response.status_code:響應狀態(tài)碼,返回值為200表示網絡請求正常
- response.encoding:編碼方式
- response.apparent_encoding:從內容中分析出的響應內容編碼方式
- response.request:請求對象;主要包括url、method、headers等
- response.url:輸出請求的網址鏈接
print(response.status_code) # 獲取響應狀態(tài)碼 print(response.headers) # 獲取響應頭 print(response.content) # 獲取響應內容
四、個人風格requests封裝
import retrying # 需手動安裝
class HTTP(object):
"""
requests模塊封裝使用:
import HTTP
# post調用時格式為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請求
@param url: 接口url
@param method: http請求方法
@param kwargs: 接受request原生的關鍵字參數
@return 響應對象
"""
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)五、實例demo
GET請求
在URL中常見?符號,httpbin.org/get?key=val這種帶有?傳遞關鍵字參數的方式,requests可以通過params實現(xiàn)
condition_params = {'k1':'v1', 'k2':'v2', 'k3':None, 'k4':['v4','v5']}
r = requets.get('http://httpbin.org/get', params=condition_params)注意:
- 字典中鍵值為None的鍵不會被拼接添加到url中
- 多個鍵值中間用&符號拼接
- 鍵值可是列表例如上例中'k4'
- 執(zhí)行結果print(r.url) -->
httpbin.org/get?k1=v1&k…
POST請求
import requests
import json
# 指定post請求時的url
url = 'https://api.github.com/some/endpoint'
# 需要上傳或發(fā)送post請求的數據
payload = {'some': 'data'}
# 指定請求格式為json格式
headers = {'content-type': 'application/json'}
# 發(fā)送請求時將字典轉換為json格式數據
res = requests.post(url, data=json.dumps(payload), headers=headers) 到此這篇關于python requests模塊封裝詳解的文章就介紹到這了,更多相關python requests內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
通過Python實現(xiàn)Payload分離免殺過程詳解
這篇文章主要介紹了通過Python實現(xiàn)Payload分離免殺過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07
在IPython中進行Python程序執(zhí)行時間的測量方法
今天小編就為大家分享一篇在IPython中進行Python程序執(zhí)行時間的測量方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
python基于itchat實現(xiàn)微信群消息同步機器人
本篇文章主要介紹了python基于itchat實現(xiàn)微信群消息同步機器人,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
Python zip()函數的用法和技巧(解鎖并行迭代的魔力)
zip()函數是Python中一個簡潔而強大的工具,它通過并行迭代多個序列,讓代碼更加優(yōu)雅和易讀,這篇文章給大家介紹Python zip()函數完全指南:解鎖并行迭代的魔力,感興趣的朋友跟隨小編一起看看吧2026-02-02
python3下使用cv2.imwrite存儲帶有中文路徑圖片的方法
今天小編就為大家分享一篇python3下使用cv2.imwrite存儲帶有中文路徑圖片的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05

