国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python 的下一代 HTTP 客戶端

這篇具有很好參考價(jià)值的文章主要介紹了Python 的下一代 HTTP 客戶端。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Python 的下一代 HTTP 客戶端,python,http,開發(fā)語言,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

迷途小書童

讀完需要

9

分鐘

速讀僅需 3 分鐘

1

? ?

環(huán)境

  • windows 10 64bit

  • python 3.8

  • httpx 0.23.0

2

? ?

簡介

之前我們介紹過使用 requests ( https://xugaoxiang.com/2020/11/28/python-module-requests/ ) 來進(jìn)行 http 操作,本篇介紹另一個(gè)功能非常類似的第三方庫 httpx,它提供了同步和異步的 API,同時(shí)支持 HTTP/1.1 和 HTTP/2,是一個(gè)全功能的 HTTP 客戶端。

3

? ?

安裝

使用 pip 安裝,執(zhí)行命令

pip install httpx

在安裝 python 庫的同時(shí),還安裝了命令行工具 httpx.exe

Python 的下一代 HTTP 客戶端,python,http,開發(fā)語言,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

來看幾個(gè)簡單的示例

# get方法請求url
httpx.exe https://github.com -m get


# post方法請求url,同時(shí)上傳一個(gè)文本文件
httpx.exe https://domain.com -m post -f test.txt

4

? ?

基本使用

還是拿之前的 flask 后端例子來講

from flask import Flask, jsonify, request
from flask_restful import Api, Resource, reqparse




USERS = [
    {"name": "zhangsan"},
    {"name": "lisi"},
    {"name": "wangwu"},
    {"name": "zhaoliu"}
]


class Users(Resource):


    def get(self):
        return jsonify(USERS)


    def post(self):
        args = reqparse.RequestParser() \
            .add_argument('name', type=str, location='json', required=True, help="名字不能為空") \
            .parse_args()


        if args['name'] not in USERS:
            USERS.append({"name": args['name']})


        return jsonify(USERS)


    def delete(self):
        USERS = []
        return jsonify(USERS)




class UserId(Resource):


    def __init__(self):
        self.parser = reqparse.RequestParser()
        self.parser.add_argument('name', type=str)
        self.parser.add_argument('age', type=int)


    def get(self, userid):
        datas = self.parser.parse_args()


        return jsonify(
            {"name": USERS[int(userid)].get('name'), "age": datas.get('age')}
        )


    def post(self, userid):
        file = request.files['file']
        file.save('flask_file.txt')


        return jsonify({
            'msg' : 'success'
        })


app = Flask(__name__)
api = Api(app, default_mediatype="application/json")


api.add_resource(Users, '/users')
api.add_resource(UserId, '/user/<userid>')


app.run(host='0.0.0.0', port=5000, use_reloader=True, debug=True)

啟動后端服務(wù)后,接著來看看客戶端的請求。httpx 的基本用法和 requests 近乎相同,很多時(shí)候,只需要將原來的代碼中的 requests 換成 httpx 就行。

import httpx


# 使用get方法
r = httpx.get('http://127.0.0.1:5000/users')


# http返回碼
print(r.status_code)


# http頭
print(r.headers['content-type'])
# 也可以使用 r.headers.get('content-type')


# 接口返回的json
print(r.json())

Python 的下一代 HTTP 客戶端,python,http,開發(fā)語言,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

import httpx
import json


param = {'name': 'xugaoxiang'}
headers = {"Content-type": "application/json"}


# post請求
r = httpx.post('http://127.0.0.1:5000/users', data=json.dumps(param), headers=headers)


print(r.status_code)
print(r.json())

Python 的下一代 HTTP 客戶端,python,http,開發(fā)語言,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

import httpx


# delete請求
r = httpx.delete('http://127.0.0.1:5000/users')
print(r.json())
print(r.status_code)

Python 的下一代 HTTP 客戶端,python,http,開發(fā)語言,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

除此之外,像 put、head、options 方法的請求也是類似的,這里就不再舉例了

r = httpx.put(url, data={'key': 'value'})
r = httpx.head(url)
r = httpx.options(url)

5

? ?

高級用法

上面示例中的用法是 httpx 提供的 top-level API,這在寫一些測試腳本或者做系統(tǒng)原型時(shí)問題不大,但真正要在實(shí)際項(xiàng)目中去用的話,就會有性能上的問題。這是因?yàn)?httpx 在進(jìn)行每一次的請求時(shí)都會去重新建立一個(gè)鏈接,也就是原有的鏈接沒有被復(fù)用,這在高并發(fā)的情況就顯得特別低效。

類似于 requests 模塊中的 Session,httpx 提供了 Client,它會使用 http 連接池,大大減少鏈接重新建立的次數(shù),減少 cpu 的使用率,降低了網(wǎng)絡(luò)擁堵,提升系統(tǒng)效率。

Client 的使用比較簡單,推薦的做法是將 Client 作為 context 管理器,看下面的示例

import httpx


with httpx.Client() as client:
    # 請求部分,將原來的 httpx 換成 client 就可以了,參數(shù)是一樣的
    r = client.get('http://127.0.0.1:5000/users')
    print(r.json())
    print(r.status_code)

6

? ?

同步請求與異步請求

默認(rèn)情況下,httpx 提供的是標(biāo)準(zhǔn)同步 API,如果想使用異步請求,可以這樣

import httpx
import asyncio


async def make_async_request():
    async with httpx.AsyncClient()  as client:
        r = await client.get('http://127.0.0.1:5000/users')
        print(r.json())
        print(r.status_code)


asyncio.run(make_async_request())

Python 的下一代 HTTP 客戶端,python,http,開發(fā)語言,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

7

? ?

http2 支持

要使能 http2,我們需要額外安裝庫 httpx[http2]

# 這個(gè)包名取的太奇怪了
pip install httpx[http2]

然后在初始化 client 的時(shí)候加上 http2 的支持

with httpx.Client(http2=True)  as client:
    r = client.get('http://127.0.0.1:5000/users')

8

? ?

免費(fèi)社群文章來源地址http://www.zghlxwxcb.cn/news/detail-663568.html

到了這里,關(guān)于Python 的下一代 HTTP 客戶端的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 下一代智能合約開發(fā)語言(一)

    背景 過去的三個(gè)月可能是我過去幾年離一百萬最近的一次,錯過了aptos的空投,幾分鐘就可以做一個(gè)任務(wù),最后空投了150APT代幣,最高時(shí)價(jià)值4W。。。真的是真金白銀的教訓(xùn)。不過作為一個(gè)開發(fā)者,看到的更多是區(qū)塊鏈未來的價(jià)值,所以開始真正投入到智能合約開發(fā)的學(xué)習(xí)中

    2024年02月02日
    瀏覽(103)
  • 下一代網(wǎng)絡(luò)爬蟲:AI agents

    下一代網(wǎng)絡(luò)爬蟲:AI agents

    下一代網(wǎng)絡(luò)爬蟲是爬蟲級 AI agents。 由于現(xiàn)代網(wǎng)頁的復(fù)雜性,現(xiàn)代爬蟲都傾向于使用高性能分布式 RPA,完全和真人一樣訪問網(wǎng)頁,采集數(shù)據(jù)。由于 AI 的成熟,RPA 工具也在升級為 AI agents。因此,網(wǎng)頁爬蟲的發(fā)展趨勢是爬蟲級智能體(AI agents),或者我喜歡稱為 數(shù)字超人 。 互聯(lián)

    2024年01月22日
    瀏覽(101)
  • Android 下一代架構(gòu)指南:DDD

    Android 下一代架構(gòu)指南:DDD

    移動端架構(gòu)與網(wǎng)站架構(gòu)的區(qū)別是什么?網(wǎng)易新聞客戶端的架構(gòu)演進(jìn)歷程是怎樣的?為什么要選擇 DDD 思想來指導(dǎo)重構(gòu)?DDD 落地中應(yīng)當(dāng)關(guān)注哪些方面?帶著這些問題我們來看下文。(節(jié)選自網(wǎng)易新聞App架構(gòu)重構(gòu)實(shí)踐) 當(dāng)前,大多數(shù)移動開發(fā)團(tuán)隊(duì)選擇以 MVP 作為業(yè)務(wù)層的核心架構(gòu)

    2023年04月10日
    瀏覽(97)
  • Deno 下一代JavaScript運(yùn)行時(shí)

    Deno 下一代JavaScript運(yùn)行時(shí)

    目錄 1、簡介 2、Deno 的特點(diǎn) 3、Deno 和 Node 的區(qū)別 4、TypeScript開箱即用 5、內(nèi)置的基本開發(fā)工具 獨(dú)立可執(zhí)行文件 測試運(yùn)行器 代碼格式化程序 代碼linter ?6、專為云而建 7、從瀏覽器到后端的一致代碼 TC39 WinterCG 8、高性能聯(lián)網(wǎng) 9、數(shù)百萬個(gè)社區(qū)模塊 10、相關(guān)框架 Deno是為執(zhí)行Jav

    2024年02月08日
    瀏覽(98)
  • 邊緣計(jì)算:下一代計(jì)算模式的突破

    邊緣計(jì)算:下一代計(jì)算模式的突破

    ? 隨著物聯(lián)網(wǎng)、人工智能和大數(shù)據(jù)等技術(shù)的不斷發(fā)展,計(jì)算需求變得越來越復(fù)雜,傳統(tǒng)的云計(jì)算模式已經(jīng)難以滿足快速增長的數(shù)據(jù)處理需求。在這樣的背景下,邊緣計(jì)算作為一種全新的計(jì)算模式嶄露頭角,為我們帶來了更加靈活、高效的解決方案。本文將深入探討邊緣計(jì)算的

    2024年02月12日
    瀏覽(102)
  • 下一代Windows命名為Win 11?微軟的下一步要來了

    下一代Windows命名為Win 11?微軟的下一步要來了

    這包括一個(gè)新的開始菜單,新的系統(tǒng)圖標(biāo),文件資源管理器的改進(jìn),以及結(jié)束Windows 95時(shí)代的圖標(biāo),圓角和對內(nèi)置Windows應(yīng)用程序的更新也在計(jì)劃之中。 除了用戶界面之外,Windows的重大變化似乎也在穩(wěn)步進(jìn)行中。微軟似乎準(zhǔn)備解決很多揮之不去的問題,計(jì)劃對多個(gè)顯示器上的應(yīng)

    2024年04月12日
    瀏覽(98)
  • 下一代圖片格式AVIF,趕緊用起!

    下一代圖片格式AVIF,趕緊用起!

    介紹AVIF圖片格式的特點(diǎn)和在Web端顯示AVIF格式圖片的兩種方案。 AVIF是一種基于AV1視頻編碼的新圖像格式,相對于JPEG、Wep等圖片格式壓縮率更高,并且畫面細(xì)節(jié)更好。AVIF通過使用更現(xiàn)代的壓縮算法,在相同質(zhì)量的前提下,AVIF文件大小是JPEG文件的35%左右。 AVIF支持高動態(tài)范圍(

    2024年02月05日
    瀏覽(89)
  • 下一代存儲解決方案:湖倉一體

    下一代存儲解決方案:湖倉一體

    文章首發(fā)地址 湖倉一體是將數(shù)據(jù)湖和數(shù)據(jù)倉庫相結(jié)合的一種數(shù)據(jù)架構(gòu),它可以同時(shí)滿足大數(shù)據(jù)存儲和傳統(tǒng)數(shù)據(jù)倉庫的需求。具體來說,湖倉一體可以實(shí)現(xiàn)以下幾個(gè)方面的功能: 數(shù)據(jù)集成: 湖倉一體可以集成多個(gè)數(shù)據(jù)源,包括結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù),例如傳統(tǒng)關(guān)系型數(shù)據(jù)庫、

    2024年02月10日
    瀏覽(22)
  • 下一代Edge AI的應(yīng)用初探

    如您所見,AI已不再只是科幻電影的經(jīng)典主題,它正在以驚人的速度被應(yīng)用到我們?nèi)粘I钪械姆椒矫婷?,并從個(gè)人關(guān)系到工作項(xiàng)目上,逐漸改變著我們的想法或行為。 其中,一個(gè)最為典型的領(lǐng)域當(dāng)屬NextGEN Edge AI(下一代邊緣人工智能)應(yīng)用。它能夠通過諸如:排名、分類、

    2024年02月21日
    瀏覽(89)
  • 移動云COCA架構(gòu),重新定義下一代云

    移動云COCA架構(gòu),重新定義下一代云

    當(dāng)前,算力已經(jīng)成為 全球科技競爭的焦點(diǎn) 為此,移動云重磅發(fā)布 「移動云COCA(Compute on chip Architecture)軟硬一體片上計(jì)算架構(gòu)」 以下簡稱移動云COCA架構(gòu) 以此打造國家級自主可控的 高性能算力底座 帶動國產(chǎn)化智算產(chǎn)業(yè)成熟發(fā)展 抓住云計(jì)算技術(shù)定義權(quán) 引領(lǐng)云計(jì)算市場下一個(gè)

    2024年02月08日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包