patch請求_Python-Http請求庫-Requests and AIOHTTP的使用
阿新 • • 發佈:2020-12-10
技術標籤:patch請求python requests返回值為200 但是text無內容
首先對庫進行安裝:
pip install aiohttp[speedups]
pip install requests
一、Requests庫
Requests 簡便的 API 意味著所有 HTTP 請求型別都是顯而易見的。
import requests r = requests.get('https://api.github.com/events') r = requests.post('http://httpbin.org/post', data = {'key':'value'}) r = requests.put('http://httpbin.org/put', data = {'key':'value'}) r = requests.delete('http://httpbin.org/delete') r = requests.head('http://httpbin.org/get') r = requests.options('http://httpbin.org/get')
現在,我們有一個名為r
的Response
物件。我們可以從這個物件中獲取所有我們想要的資訊。常用的有以下內容:
content
響應的內容,以位元組為單位。
cookies
伺服器傳送回的Cookie的CookieJar。
encoding
訪問r.text時進行編碼以進行解碼。
headers
不區分大小寫的響應標題字典。例如,headers['content-encoding']
將返回'Content-Encoding'
響應頭的值。
history
Response
請求歷史記錄中的物件列表。任何重定向響應都將在此處結束。該列表從最早的請求到最新的請求進行排序。
status_code
響應的HTTP狀態的整數程式碼,例如404或200。
text
響應的內容,以unicode表示。
url
響應的最終URL位置。
請求會話:(提供cookie永續性,連線池和配置)
基礎用法:
import requests
s = requests.Session()
s.get('http://httpbin.org/get') # <Response [200]>
或作為上下文管理器:
with requests.Session() as s: s.get('http://httpbin.org/get') #<Response [200]>
二、AIOHTTP
用於asyncio和Python的非同步HTTP客戶端/伺服器。
主要功能:
- 同時支援客戶端和HTTP Server。
- 開箱即用地支援伺服器WebSocket和 客戶端WebSocket,而沒有回撥地獄。
- Web伺服器具有中介軟體, 訊號和可插入路由。
客戶示例:
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://python.org')
print(html)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
伺服器示例:
from aiohttp import web
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(text=text)
app = web.Application()
app.add_routes([web.get('/', handle),
web.get('/{name}', handle)])
if __name__ == '__main__':
web.run_app(app)
傳送請求:
import aiohttp
async with aiohttp.ClientSession() as session:
async with session.get('http://httpbin.org/get') as resp:
print(resp.status)
print(await resp.text())
#同樣有以下幾種請求
session.post('http://httpbin.org/post', data=b'data')
session.put('http://httpbin.org/put', data=b'data')
session.delete('http://httpbin.org/delete')
session.head('http://httpbin.org/get')
session.options('http://httpbin.org/get')
session.patch('http://httpbin.org/patch', data=b'data')
三、Requests與AIOhttp對比
在傳送請求上,Requests為同步庫,而AIOHttp為非同步庫
具體的效率對比可參考:
aiohttp與requests效率對比www.jianshu.comAIOhttp是AIO家族非常出色的一個庫,AIO非同步家族發展非常迅猛,近年來又支援了非同步HTTP客戶端/伺服器,發展前途一片光明。