欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

HTTPX入門使用教程

 更新時(shí)間:2023年12月19日 15:36:22   作者:軟件質(zhì)量保障  
HTTPX是一款Python棧HTTP客戶端庫(kù),它提供了比標(biāo)準(zhǔn)庫(kù)更高級(jí)別、更先進(jìn)的功能,如連接重用、連接池、超時(shí)控制、自動(dòng)繁衍請(qǐng)求,下面通過(guò)本文介紹HTTPX入門知識(shí)和基本用法,感興趣的朋友一起看看吧

1. 什么是HTTPX?

HTTPX是一款Python棧HTTP客戶端庫(kù),它提供了比標(biāo)準(zhǔn)庫(kù)更高級(jí)別、更先進(jìn)的功能,如連接重用、連接池、超時(shí)控制、自動(dòng)繁衍請(qǐng)求等等。HTTPX同時(shí)也支持同步和異步兩種方式,因此可以在同步代碼和異步代碼中通用。

HTTPX功能如下:

1. 發(fā)送HTTP請(qǐng)求:HTTPX支持發(fā)送HTTP GET、POST等請(qǐng)求,并提供了豐富的選項(xiàng)進(jìn)行定制化。

2. 請(qǐng)求頭和查詢參數(shù):HTTPX可以方便地添加請(qǐng)求頭和查詢參數(shù)到HTTP請(qǐng)求中。

3. 超時(shí)設(shè)置:HTTPX支持對(duì)HTTP請(qǐng)求的超時(shí)時(shí)間進(jìn)行設(shè)置,以避免長(zhǎng)時(shí)間等待響應(yīng)。

4. SSL/TLS證書驗(yàn)證:當(dāng)使用HTTPS協(xié)議時(shí),HTTPX可以驗(yàn)證SSL/TLS證書。

5. 文件上傳和下載:HTTPX可以用于上傳和下載文件。

6. Cookie管理:HTTPX可以管理cookie。

7. 連接池:HTTPX提供連接池以提高性能。

8. 異步請(qǐng)求:HTTPX支持異步請(qǐng)求,在異步代碼中提供了更好的性能表現(xiàn)。

相比其他HTTP客戶端庫(kù),HTTPX有以下優(yōu)勢(shì):

  • 性能更好:HTTPX采用異步IO模型實(shí)現(xiàn)高效的并發(fā)處理,使得其在處理大量數(shù)據(jù)和并發(fā)請(qǐng)求時(shí)比同類庫(kù)要快得多。
  • 功能更全面:HTTPX提供了更多的功能,如連接池、自動(dòng)繁衍請(qǐng)求等等,使得它可以勝任更多不同的HTTP場(chǎng)景。
  • 更為靈活:HTTPX提供了更多可用的選項(xiàng)以滿足不同的HTTP場(chǎng)景和使用需求,從而使得它更為靈活。
  • 更加安全:HTTPX在處理HTTPS請(qǐng)求時(shí)提供更完善的SSL/TLS證書驗(yàn)證機(jī)制,從而更加安全。

2. HTTPX功能

1. 發(fā)送HTTP請(qǐng)求

import httpx
# 發(fā)送GET請(qǐng)求
response = httpx.get('https://www.example.com')
print(response.status_code)  # 狀態(tài)碼
print(response.text)  # 響應(yīng)內(nèi)容
# 發(fā)送POST請(qǐng)求
data = {'name': 'example', 'age': 18}
response = httpx.post('https://www.example.com', data=data)
print(response.status_code)  # 狀態(tài)碼
print(response.text)  # 響應(yīng)內(nèi)容

2. 請(qǐng)求頭和查詢參數(shù)

HTTPX發(fā)送HTTP請(qǐng)求時(shí)往往需要在請(qǐng)求中添加一些頭部信息或查詢參數(shù),下面介紹如何在HTTPX中添加和定制這些信息。

添加請(qǐng)求頭

可以通過(guò)headers參數(shù)向HTTP請(qǐng)求中添加頭部信息。以下是一個(gè)示例代碼:

import httpx
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = httpx.get('https://www.example.com', headers=headers)
print(response.status_code)
print(response.text)

可以看到,在發(fā)送GET請(qǐng)求時(shí),使用了一個(gè) headers 字典來(lái)指定請(qǐng)求頭。其中 User-Agent 是模擬瀏覽器發(fā)送請(qǐng)求的標(biāo)準(zhǔn)請(qǐng)求頭之一??梢愿鶕?jù)實(shí)際需求添加更多的請(qǐng)求頭信息。

添加查詢參數(shù)

除了請(qǐng)求頭外,還可以通過(guò) params 參數(shù)向HTTP請(qǐng)求中添加查詢參數(shù)。以下是一個(gè)示例代碼:

import httpx
params = {'key1': 'value1', 'key2': 'value2'}
response = httpx.get('https://www.example.com', params=params)
print(response.status_code)
print(response.text)

在上述代碼中,params 參數(shù)被用于將查詢參數(shù)添加到 GET 請(qǐng)求中。具體而言,HTTPX 會(huì)根據(jù)鍵值對(duì)自動(dòng)生成查詢字符串并將其附加到 URL 的末尾,就像在瀏覽器中一樣。

3. 超時(shí)設(shè)置

在發(fā)送HTTP請(qǐng)求時(shí),往往需要設(shè)置超時(shí)時(shí)間以避免等待過(guò)長(zhǎng)時(shí)間的響應(yīng)。HTTPX 提供了設(shè)置超時(shí)時(shí)間的方法,下面介紹如何在 HTTPX 中設(shè)置超時(shí)時(shí)間:

發(fā)送單次請(qǐng)求時(shí)設(shè)置超時(shí)時(shí)間

可以通過(guò) timeout 參數(shù)來(lái)設(shè)置單個(gè)請(qǐng)求的超時(shí)時(shí)間,單位為秒(s)。以下是一個(gè)示例代碼:

import httpx
# 設(shè)置 5 秒超時(shí)時(shí)間
timeout = httpx.Timeout(5)
response = httpx.get('https://www.example.com', timeout=timeout)
print(response.status_code)
print(response.text)

在上述代碼中,timeout 參數(shù)被用于將超時(shí)時(shí)間設(shè)置為 5 秒。如果在 5 秒內(nèi)沒(méi)有收到服務(wù)器的響應(yīng),HTTPX 將自動(dòng)取消該請(qǐng)求并拋出 httpx.ReadTimeout 異常。

全局設(shè)置超時(shí)時(shí)間

除了可以在單個(gè)請(qǐng)求中設(shè)置超時(shí)時(shí)間外,還可以全局設(shè)置所有請(qǐng)求的超時(shí)時(shí)間。可以通過(guò)創(chuàng)建一個(gè) Client 實(shí)例并指定超時(shí)時(shí)間來(lái)實(shí)現(xiàn)。以下是一個(gè)示例代碼:

import httpx
# 全局設(shè)置 5 秒超時(shí)時(shí)間
client = httpx.Client(timeout=5)
response = client.get('https://www.example.com')
print(response.status_code)
print(response.text)

在上述代碼中,創(chuàng)建了一個(gè) Client 實(shí)例,并將超時(shí)時(shí)間設(shè)置為 5 秒。在之后的所有請(qǐng)求中,都會(huì)默認(rèn)使用這個(gè)超時(shí)時(shí)間。需要注意的是,全局設(shè)置會(huì)影響所有請(qǐng)求,因此需要根據(jù)實(shí)際情況合理地設(shè)置超時(shí)時(shí)間。

4. 異步請(qǐng)求

異步請(qǐng)求示例

首先,需要安裝異步標(biāo)準(zhǔn)庫(kù) asyncio 和 HTTPX 庫(kù)。

安裝完成后,就可以在 Python 腳本中使用異步請(qǐng)求了。以下是一個(gè)簡(jiǎn)單的異步 GET 請(qǐng)求示例:

import asyncio
import httpx
async def main():
    async with httpx.AsyncClient() as client:
        response = await client.get('https://www.example.com')
        print(response.status_code)
        print(response.text)
asyncio.run(main())

在上述代碼中,我們使用異步函數(shù) main() 來(lái)發(fā)送異步 GET 請(qǐng)求。其中,使用了 httpx.AsyncClient() 創(chuàng)建了一個(gè)異步客戶端實(shí)例,然后調(diào)用了 client.get() 函數(shù)來(lái)發(fā)送 GET 請(qǐng)求。

在異步請(qǐng)求中,需要使用關(guān)鍵字 await 等待異步操作執(zhí)行完成,這樣才能保證程序按照正確的順序執(zhí)行。

進(jìn)一步使用示例

除了簡(jiǎn)單的 GET 請(qǐng)求外,HTTPX 還支持復(fù)雜的異步操作和定制化需求。以下是一個(gè)使用異步 POST 請(qǐng)求并上傳文件的示例:

import asyncio
import httpx
async def main():
    async with httpx.AsyncClient() as client:
        # 上傳文件
        files = {'file': ('example.txt', 'Hello, world!')}
        response = await client.post('https://www.example.com/upload', files=files)
        # 顯示響應(yīng)信息
        print(response.status_code)
        print(response.text)
asyncio.run(main())

在上述代碼中,使用了 client.post() 函數(shù)向服務(wù)器上傳文件。其中,files 參數(shù)被用于指定上傳的文件信息。

需要注意的是,在異步請(qǐng)求過(guò)程中,需使用 async with httpx.AsyncClient() as client: 的方式創(chuàng)建異步客戶端實(shí)例,并通過(guò) async/await 關(guān)鍵字等待異步操作完成,這樣才能確保程序正確執(zhí)行。

5. SSL/TLS證書驗(yàn)證

SSL/TLS證書驗(yàn)證是保證HTTP通信安全的重要手段之一。HTTPX提供了對(duì)SSL/TLS證書的驗(yàn)證機(jī)制,下面介紹如何在HTTPX中進(jìn)行SSL/TLS證書驗(yàn)證:

驗(yàn)證服務(wù)器證書

HTTPX 默認(rèn)會(huì)驗(yàn)證服務(wù)器證書,如果證書無(wú)效或不可信,則會(huì)拋出 httpx.RemoteProtocolError 異常。以下是一個(gè)示例代碼:

import httpx
response = httpx.get('https://www.example.com')
print(response.status_code)
print(response.text)

在上述代碼中,使用 httpx.get() 函數(shù)向服務(wù)器發(fā)送 GET 請(qǐng)求,并默認(rèn)啟動(dòng) SSL/TLS 證書驗(yàn)證。如果服務(wù)器證書無(wú)效,則 HTTPX 會(huì)拋出 httpx.RemoteProtocolError 異常。

禁用服務(wù)器證書驗(yàn)證

雖然 SSL/TLS 證書驗(yàn)證是確保通信安全的重要手段,但在一些特殊情況下需要禁用證書驗(yàn)證,例如調(diào)試時(shí)使用自簽名證書等??梢酝ㄟ^(guò)將 verify 參數(shù)設(shè)置為 False 來(lái)禁用 SSL/TLS 證書驗(yàn)證。以下是一個(gè)示例代碼:

import httpx
response = httpx.get('https://www.example.com', verify=False)
print(response.status_code)
print(response.text)

在上述代碼中,verify=False 參數(shù)被用于禁用服務(wù)器證書驗(yàn)證。需要注意的是,這種方法會(huì)降低通信安全性,應(yīng)謹(jǐn)慎使用。

指定客戶端證書

除了驗(yàn)證服務(wù)器證書外,HTTPX 還支持指定客戶端證書。可以通過(guò) cert 參數(shù)來(lái)指定客戶端證書和私鑰文件的路徑。以下是一個(gè)示例代碼:

import httpx
client_cert = ('path/to/cert.pem', 'path/to/key.pem')
response = httpx.get('https://www.example.com', cert=client_cert)
print(response.status_code)
print(response.text)

在上述代碼中,client_cert 變量被用于指定客戶端證書和私鑰的路徑。需要注意的是,客戶端證書應(yīng)該由受信任的第三方機(jī)構(gòu)頒發(fā),并且應(yīng)該進(jìn)行保護(hù)。

6. 文件上傳和下載

HTTPX支持文件上傳和下載,可以通過(guò)httpx.post() 和 httpx.get() 函數(shù)向服務(wù)器上傳和下載文件。下面分別介紹如何在 HTTPX 中進(jìn)行文件上傳和下載:

文件上傳示例
可以通過(guò) files 參數(shù)來(lái)實(shí)現(xiàn)文件上傳功能。以下是一個(gè)文件上傳的示例代碼:

import httpx
with open('example.txt', 'rb') as f:
files = {'file': ('example.txt', f)}
response = httpx.post('https://www.example.com/upload', files=files)
print(response.status_code)
print(response.text)

在上述代碼中,使用了 open() 函數(shù)打開本地文件,并將文件數(shù)據(jù)添加到 files 參數(shù)中。然后,使用 httpx.post() 函數(shù)向服務(wù)器發(fā)送 POST 請(qǐng)求并上傳文件。

需要注意的是,('example.txt', f) 中,第一個(gè)參數(shù)是文件名,第二個(gè)參數(shù)是文件內(nèi)容。具體而言,文件內(nèi)容應(yīng)該以二進(jìn)制格式表示。

文件下載示例
可以通過(guò) stream=True 參數(shù)將文件下載至內(nèi)存中,并逐步寫入本地文件。以下是一個(gè)文件下載的示例代碼:

import httpx
response = httpx.get('https://www.example.com/image.jpg', stream=True)
with open('image.jpg', 'wb') as f:
for chunk in response.iter_bytes():
f.write(chunk)
print(response.status_code)

在上述代碼中,使用了 httpx.get() 函數(shù)向服務(wù)器發(fā)送 GET 請(qǐng)求。其中,stream=True 參數(shù)被用于啟動(dòng)響應(yīng)流模式,這樣可以將文件下載到內(nèi)存中,然后逐步寫入本地文件。需要注意的是,在下載大文件時(shí),響應(yīng)流模式可以減少內(nèi)存占用并提高性能。

Cookie管理

HTTPX提供了用于管理Cookie的工具,可以通過(guò)httpx.CookieJar()對(duì)象來(lái)管理Cookie。下面介紹如何在HTTPX中進(jìn)行Cookie管理:

使用CookieJar管理Cookie

可以使用 httpx.CookieJar() 對(duì)象來(lái)管理 Cookie。以下是一個(gè)示例代碼:

import httpx
# 創(chuàng)建 CookieJar 實(shí)例
cookie_jar = httpx.CookieJar()
# 將 Cookie 添加到 CookieJar 中
cookie = httpx.cookies.Cookie(name='name', value='value')
cookie_jar.set_cookie(cookie)
# 使用 CookieJar 發(fā)送請(qǐng)求
with httpx.Client(cookie_jar=cookie_jar) as client:
    response = client.get('https://www.example.com')
print(response.status_code)

在上述代碼中,首先創(chuàng)建了一個(gè) httpx.CookieJar() 實(shí)例,并將 httpx.cookies.Cookie() 對(duì)象添加到 CookieJar 中。然后,在使用 HTTPX 發(fā)送請(qǐng)求時(shí),通過(guò) cookie_jar=cookie_jar 參數(shù)來(lái)指定使用 CookieJar 管理 Cookie。

需要注意的是,通過(guò) set_cookie() 方法向 httpx.CookieJar() 添加 Cookie 后,這些 Cookie 將被自動(dòng)附加到后續(xù)的 HTTP 請(qǐng)求中。

使用Session管理Cookie

除了使用 httpx.CookieJar() 對(duì)象管理 Cookie 外,還可以使用 httpx.Client() 對(duì)象的 Session 來(lái)管理 Cookie。以下是一個(gè)示例代碼:

import httpx
# 創(chuàng)建 Session 實(shí)例
session = httpx.Client()
# 向 Session 中添加 Cookie
cookie = httpx.cookies.Cookie(name='name', value='value')
session.cookies.set_cookie(cookie)
# 使用 Session 發(fā)送請(qǐng)求
response = session.get('https://www.example.com')
print(response.status_code)

在上述代碼中,通過(guò) httpx.Client() 創(chuàng)建了一個(gè) HTTP 客戶端實(shí)例,并使用 session.cookies.set_cookie() 方法向 Session 中添加 Cookie。然后,在使用 HTTPX 發(fā)送請(qǐng)求時(shí),不需要指定 cookie_jar 參數(shù),而是使用 Session 自動(dòng)管理 Cookie。

需要注意的是,httpx.Client() 的 Session 會(huì)自動(dòng)保存并發(fā)送所有 Cookie,因此在發(fā)送多個(gè) HTTP 請(qǐng)求時(shí),可以方便地管理 Cookie。

連接池

HTTPX 是一個(gè) Python 的異步 HTTP 客戶端庫(kù)。它支持連接池來(lái)重用已建立的 HTTP 連接,從而提高性能并減少網(wǎng)絡(luò)延遲。

創(chuàng)建連接池

要?jiǎng)?chuàng)建連接池,請(qǐng)使用 httpx.AsyncClient() 構(gòu)造函數(shù)并指定 limits 參數(shù)。

import httpx
limits = httpx.Limits(max_connections=100, max_keepalive=10)
client = httpx.AsyncClient(limits=limits)

此代碼將創(chuàng)建一個(gè)最大連接數(shù)為 100,最大保持活動(dòng)連接數(shù)為 10 的連接池。

使用連接池

一旦你創(chuàng)建了連接池,你可以像正常地發(fā)送請(qǐng)求一樣使用 httpx.AsyncClient() 實(shí)例發(fā)送請(qǐng)求。在創(chuàng)建客戶端時(shí),HTTPX 將自動(dòng)管理連接池中的連接。

response = await client.get("https://www.example.com")
print(response.text)

這將使用連接池中的空閑連接來(lái)發(fā)送 HTTP GET 請(qǐng)求,并返回響應(yīng)。如果沒(méi)有可用的連接,HTTPX 將自動(dòng)創(chuàng)建一個(gè)新連接。

3. 使用HTTPX編寫Web爬蟲

import asyncio
import httpx
from bs4 import BeautifulSoup
async def fetch(url):
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        return response.text
async def scrape():
    url = "https://book.douban.com/top250"
    html = await fetch(url)
    soup = BeautifulSoup(html, "html.parser")
    books = []
    for book in soup.select(".indent > table"):
        title = book.select_one(".pl2 > a")["title"]
        link = book.select_one(".pl2 > a")["href"]
        rating = book.select_one(".rating_num").text.strip()
        author = book.select_one(".pl").text.strip().split("/")[0]
        books.append({"title": title, "link": link, "rating": rating, "author": author})
    return books
if __name__ == "__main__":
    books = asyncio.run(scrape())
    for book in books:
        print(book)

到此這篇關(guān)于HTTPX入門使用教程的文章就介紹到這了,更多相關(guān)HTTPX使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 異常處理的實(shí)例詳解

    Python 異常處理的實(shí)例詳解

    這篇文章主要介紹了Python 異常處理的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家掌握Python 異常的知識(shí),需要的朋友可以參考下
    2017-09-09
  • python 利用openpyxl讀取Excel表格中指定的行或列教程

    python 利用openpyxl讀取Excel表格中指定的行或列教程

    這篇文章主要介紹了python 利用openpyxl讀取Excel表格中指定的行或列教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Python堆排序原理與實(shí)現(xiàn)方法詳解

    Python堆排序原理與實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Python堆排序原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Python堆排序的概念、原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-05-05
  • SQLite3中文編碼 Python的實(shí)現(xiàn)

    SQLite3中文編碼 Python的實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇SQLite3中文編碼 Python的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Python編程中time模塊的一些關(guān)鍵用法解析

    Python編程中time模塊的一些關(guān)鍵用法解析

    這篇文章主要介紹了Python編程中time模塊的一些關(guān)鍵用法解析,像mktime和localtime以及gmtime這些常用方法都有講到,需要的朋友可以參考下
    2016-01-01
  • python和opencv實(shí)現(xiàn)摳圖

    python和opencv實(shí)現(xiàn)摳圖

    這篇文章主要為大家詳細(xì)介紹了使用python和opencv實(shí)現(xiàn)摳圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 使用Python實(shí)現(xiàn)多功能課堂點(diǎn)名器與抽簽工具

    使用Python實(shí)現(xiàn)多功能課堂點(diǎn)名器與抽簽工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)多功能課堂點(diǎn)名器,也可以用作抽簽工具,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • Python數(shù)據(jù)類型及常用方法

    Python數(shù)據(jù)類型及常用方法

    這篇文章主要介紹了Python數(shù)據(jù)類型及常用方法?,文章主要給大家分享Python的一些常用數(shù)據(jù)類型,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • pytorch 調(diào)整某一維度數(shù)據(jù)順序的方法

    pytorch 調(diào)整某一維度數(shù)據(jù)順序的方法

    今天小編就為大家分享一篇pytorch 調(diào)整某一維度數(shù)據(jù)順序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python保留小數(shù)函數(shù)的幾種使用總結(jié)

    python保留小數(shù)函數(shù)的幾種使用總結(jié)

    本文主要介紹了python保留小數(shù)函數(shù)的幾種使用總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評(píng)論