1. 程式人生 > 其它 >patch請求_Python-Http請求庫-Requests and AIOHTTP的使用

patch請求_Python-Http請求庫-Requests and AIOHTTP的使用

技術標籤:patch請求python requests返回值為200 但是text無內容

f0f87088d54a8b6089ac78eb1f6a1e6b.png

首先對庫進行安裝:

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')

現在,我們有一個名為rResponse物件。我們可以從這個物件中獲取所有我們想要的資訊。常用的有以下內容:

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.com 9c758f3d3af85c6f3330c3ad78d2e9f8.png

AIOhttp是AIO家族非常出色的一個庫,AIO非同步家族發展非常迅猛,近年來又支援了非同步HTTP客戶端/伺服器,發展前途一片光明。