Pythonhttpxの使い方

WBOY
WBOY転載
2023-04-18 23:43:033040ブラウズ

Httpx とは

Httpx は、最新の使いやすい HTTP クライアントとサーバーを提供する Python ライブラリです。 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 は、GET、POST、PUT、DELETE、HEAD、OPTIONS など、さまざまな HTTP メソッドをサポートしています。 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())

この例では、Httpx の AsyncClient クラスを使用して非同期 GET リクエストを送信する get_request という名前の非同期関数を作成します。非同期関数では、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 パラメーターを使用して 2 つのクエリ パラメーター 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/excel ステートメントを使用して例外をキャッチし、適切なアクションを実行できます。以下に例を示します。

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/excel ステートメントを使用して、発生する可能性のあるすべての例外をキャッチし、例外の種類に基づいて適切なアクションを実行します。

証明書の検証

Httpx を使用すると、SSL 証明書を検証して、サーバーへの安全な接続を確保できます。デフォルトでは、HTTP は 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 パラメータを使用して 2 つのプロキシ サーバーを設定します。

ファイルのアップロード

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。

以上がPythonhttpxの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。