python httpx如何使用

WBOY
發布: 2023-04-18 23:43:03
轉載
2826 人瀏覽過

什麼是 Httpx

Httpx 是一個 Python 函式庫,它提供了一個現代化的、易於使用的 HTTP 用戶端和伺服器。 Httpx 可以與 Python 的非同步框架協同工作,並支援 WebSocket 和 HTTP/2。 Httpx 具有極佳的效能和安全性,並支援對各種不同的協定、編碼和驗證方案進行靈活配置。

安裝 Httpx

安裝 Httpx 函式庫非常簡單。只需使用 pip 套件管理器執行以下命令:

pip install httpx
登入後複製

如果您正在使用 Python 3.7 或更早版本,則需要安裝 Httpx 的非同步依賴項 aiohttp。

您可以透過執行以下命令來安裝它:

pip install httpx[aiohttp]
登入後複製

發送 HTTP 請求

使用 Httpx 發送 HTTP 請求非常簡單。以下是一個簡單的範例,它使用 Httpx 發送一個 GET 請求:

import httpx

response = httpx.get('https://www.baidu.com')
print(response.status_code)
print(response.text)
登入後複製

在這個範例中,我們使用 Httpx 的 get 方法發送了一個 GET 請求。該請求的 URL 是 https://www.baidu.com。這個方法傳回一個 Response 對象,我們可以使用該對象來存取回應狀態碼和回應文字。

Httpx 支援許多不同的 HTTP 方法,包括 GET、POST、PUT、DELETE、HEAD 和 OPTIONS。您可以使用 Httpx 的方法來傳送這些請求。

以下是一些範例:

import httpx

response = httpx.post('https://www.baidu.com', data={'key': 'value'})
response = httpx.put('https://www.baidu.com', data={'key': 'value'})
response = httpx.delete('https://www.baidu.com')
response = httpx.head('https://www.baidu.com')
response = httpx.options('https://www.baidu.com')
登入後複製

上述範例中的每個請求都可以使用 Httpx 的方法來傳送。這些方法中的大多數都支援傳遞資料、標頭和查詢參數等參數。

傳送非同步 HTTP 請求

Httpx 也支援非同步 HTTP 請求。以下是一個簡單的範例,它使用Httpx 發送一個非同步GET 請求:

import httpx
import asyncio

async def get_request():
    async with httpx.AsyncClient() as client:
        response = await client.get('https://www.baidu.com')
        print(response.status_code)
        print(response.text)

asyncio.run(get_request())
登入後複製

在這個範例中,我們建立了一個名為get_request 的非同步函數,它使用Httpx 的AsyncClient 類別來傳送一個非同步GET請求。在非同步函數中,我們使用 async with 語句來建立 Httpx 的非同步客戶端。使用這種方式建立客戶端可以確保在請求完成後自動關閉客戶端。然後,我們使用 await 關鍵字來非同步等待回應,並從回應物件存取回應狀態碼和回應文字。

類似於同步請求,Httpx 的非同步客戶端也支援許多不同的 HTTP 方法。

以下是一些範例:

import httpx
import asyncio

async def post_request():
    async with httpx.AsyncClient() as client:
        response = await client.post('https://www.baidu.com', data={'key': 'value'})
        print(response.status_code)
        print(response.text)

asyncio.run(post_request())
登入後複製

設定請求標頭

在傳送 HTTP 請求時,您通常需要設定請求標頭。 Httpx 可讓您透過在請求方法中傳遞 headers 參數來設定請求標頭。

以下是一個範例:

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.baidu.com', headers=headers)
print(response.status_code)
print(response.text)
登入後複製

在這個範例中,我們使用 headers 參數設定了一個名為 User-Agent 的請求標頭。

設定請求參數

Httpx 允許您在傳送 HTTP 請求時設定請求參數。

以下是一些範例:

import httpx

params = {'key1': 'value1', 'key2': 'value2'}

response = httpx.get('https://www.baidu.com', params=params)
print(response.status_code)
print(response.text)
登入後複製

在這個範例中,我們使用 params 參數設定了兩個查詢參數 key1 和 key2。

傳送請求體

在傳送 POST、PUT 和 DELETE 請求時,您通常需要在請求體中包含資料。 Httpx 可讓您使用 data 參數設定請求體中的資料。

以下是一個範例:

import httpx

data = {'key': 'value'}

response = httpx.post('https://www.baidu.com', data=data)
print(response.status_code)
print(response.text)
登入後複製

在這個範例中,我們使用 data 參數設定了一個名為 key 的請求體參數。

傳送 JSON 資料

Httpx 允許您使用 json 參數傳送 JSON 資料。

以下是一個範例:

import httpx

data = {'key': 'value'}

response = httpx.post('https://www.baidu.com', json=data)
print(response.status_code)
print(response.text)
登入後複製

在這個範例中,我們使用 json 參數設定了一個名為 key 的 JSON 請求體參數。

設定逾時

在傳送 HTTP 請求時,您通常需要設定逾時時間。 Httpx 允許您使用 timeout 參數設定逾時時間。

以下是一個範例:

import httpx

response = httpx.get('https://www.baidu.com', timeout=5)
print(response.status_code)
print(response.text)
登入後複製

在這個範例中,我們使用 timeout 參數設定了 5 秒的逾時時間。

錯誤處理

Httpx 可以拋出各種不同類型的異常,以幫助您診斷和解決問題。以下是一些常見的例外:

  • httpx.HTTPError:發生 HTTP 錯誤時引發。

  • httpx.RequestError:發生請求錯誤時引發。

  • httpx.NetworkError:發生網路錯誤時引發。

  • httpx.TimeoutException:發生逾時時引發。

在處理這些例外狀況時,您可以使用 try/except 語句來擷取例外狀況並採取適當的措施。以下是一個範例:

import httpx

try:
    response = httpx.get('https://www.baidu.com')
    response.raise_for_status()
except httpx.HTTPError as http_error:
    print(f'HTTP error occurred: {http_error}')
except httpx.RequestError as request_error:
    print(f'Request error occurred: {request_error}')
except httpx.NetworkError as network_error:
    print(f'Network error occurred: {network_error}')
except httpx.TimeoutException as timeout_error:
    print(f'Timeout error occurred: {timeout_error}')
else:
    print(response.status_code)
    print(response.text)
登入後複製

在這個範例中,我們使用 try/except 語句捕獲了所有可能發生的異常,並根據異常類型採取了適當的措施。

憑證驗證

Httpx 可讓您驗證 SSL 憑證以確保與伺服器的安全連線。預設情況下,Httpx 會驗證 SSL 憑證。如果您需要停用憑證驗證,可以將 verify 參數設定為 False。

以下是一個範例:

import httpx

response = httpx.get('https://www.baidu.com', verify=False)
print(response.status_code)
print(response.text)
登入後複製

在這個範例中,我們將 verify 參數設為 False,以停用 SSL 憑證驗證。

使用代理程式

Httpx 允許您使用代理來傳送 HTTP 請求。以下是一個範例:

import httpx

proxies = {
    'http://http-proxy-server:8080',
    'https://https-proxy-server:8080'
}

response = httpx.get('https://www.baidu.com', proxies=proxies)
print(response.status_code)
print(response.text)
登入後複製

在這個範例中,我們使用 proxies 參數設定了兩個代理伺服器。

上傳檔案

Httpx 允許您使用 files 參數上傳檔案。以下是一個範例:

import httpx

files = {'file': ('file.txt', open('file.txt', 'rb'))}

response = httpx.post('https://www.baidu.com', files=files)
print(response.status_code)
print(response.text)
登入後複製

在这个示例中,我们使用 files 参数上传了名为 file.txt 的文件。

使用 Cookie

Httpx 允许您使用 cookies 参数发送 cookie。以下是一个示例:

import httpx

cookies = {'name': 'value'}

response = httpx.get('https://www.baidu.com', cookies=cookies)
print(response.status_code)
print(response.text)
登入後複製

在这个示例中,我们使用 cookies 参数发送了名为 name 的 cookie。

以上是python httpx如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!