Python でリクエストを使用してユーザー エージェントを設定する

Jay Shaw 2023年10月10日
  1. HTTP ヘッダーの仕組みを理解する
  2. Python でユーザー エージェント データを取得する
  3. Python でリクエストを使用してユーザー エージェント値を設定する
Python でリクエストを使用してユーザー エージェントを設定する

この記事では、HTTP ヘッダー ユーザー エージェントのトピックと、Python で requests を使用してユーザー エージェントを設定する方法について説明します。 ユーザー エージェントを理解し、ユーザー エージェントを取得し、Python で requests を使用してユーザー エージェントを設定する複数の方法を学習する上で、HTTP ヘッダーとその重要性について学びます。

HTTP ヘッダーの仕組みを理解する

すべての HTTP 要求と応答には、クライアント アプリケーションとサーバーの両方で送受信される HTTP ヘッダー フィールドと呼ばれる一連の文字列が含まれています。 HTTP ヘッダーを使用すると、追加情報をサーバーに送信し、サーバーがその情報を送り返すことができます。

ヘッダーを使用すると、API を使用するときに自分自身を認証したり、アプリケーションが期待する情報の種類に関する要求を伝えたりすることができます。

HTTP ヘッダーの例をいくつか見てみましょう。

  1. Cache-Control: Cache-Control ジェネラル ヘッダー フィールドは、すべてのキャッシング システムが従わなければならない指示を表します。 Cache-Control general-header は、HTTP クライアントまたはサーバーで使用して、キャッシュ パラメータを定義したり、特定のタイプのドキュメントに対して特定のキャッシュ リクエストを作成したりできます。

    コンマで区切られたキャッシング ディレクティブのリストが提供されます。 例えば:

    Cache - Control: cache - request - directive | cache - response - directive
    # OR
    Cache - control: no - cache
    
  2. 日付: 例外なく、すべての HTTP 日付/時刻スタンプは常にグリニッジ標準時 (GMT) で表現する必要があります。 HTTP アプリケーションでは、次の 3つの日付/時刻スタンプ表現のいずれかを使用できます。

    Sat, 22 Sep 2022 20:22:37 GMT  ; RFC 822, updated by RFC 1123
    Saturday, 22-Sep-22 20:23:37 GMT ; RFC 850, obsoleted by RFC 1036
    Sat Sep 22 20:24:37 2022       ; ANSI C's asctime() format
    
  3. ユーザー エージェント: リクエストの送信元のコンピューターのブラウザー バージョンやシステム OS などの情報を返します。 これは、この記事で特に焦点を当て、requests を使用してユーザー エージェントを設定する方法を説明するヘッダーです。

    User-Agent Mozilla

これらのヘッダーは大文字と小文字が区別されないため、これらのヘッダーの大文字と小文字は関係ありません。そのため、User-Agent というフレーズは、代わりに user-agent と記述される場合があります。

URL からヘッダーを出力する方法の例を見てみましょう。 このプログラムは、対象の URL に要求を送信し、そこからすべてのヘッダーを取得してから出力します。

import requests

url = "http://www.tutorialspoint.com/python"

headers = requests.get(url).headers
print(headers)

コードの最初の行は、Python ライブラリ パッケージ requests をインポートします。 リクエストの送信先となる Web サイトの URL を格納するオブジェクト変数 url が作成されます。

変数 headers 内では、request.get() 関数を使用して url からヘッダーを取得し、変数内に保存します。 最後に、変数 headers が出力されます。

これにより、指定された URL からヘッダーの辞書全体が出力されます。

出力:

C:\python38\python.exe "C:/Users/Win 10/main.py"
{'Content-Encoding': 'gzip', 'Age': '1490828', 'Cache-Control': 'max-age=2592000', 'Content-Type': 'text/html; charset=UTF-8', 'Date': 'Sat, 24 Sep 2022 17:50:06 GMT', 'Expires': 'Mon, 24 Oct 2022 17:50:06 GMT', 'Last-Modified': 'Wed, 07 Sep 2022 11:42:58 GMT', 'Server': 'ECAcc (tir/CD76)', 'Strict-Transport-Security': 'max-age=63072000; includeSubdomains', 'Vary': 'Accept-Encoding', 'X-Cache': 'HIT', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'SAMEORIGIN', 'X-Version': 'June-1 V2', 'X-XSS-Protection': '1; mode=block', 'Content-Length': '9299'}

Process finished with exit code 0

Python でユーザー エージェント データを取得する

Python を使用してヘッダーの辞書全体を取得する方法を見てきました。 requests を使用して user-agent を設定する方法を学習する前に、このセクションを理解することが重要です。

このセクションでは、URL からのすべてのヘッダーの中で具体的に user-agent を呼び出して表示する重要な分岐点について説明します。

ユーザー エージェントはブラウザーとシステム OS のデータを返すため、Web サイトへのアクセスに使用される方法に大きく依存します。 たとえば、ウェブサイト http://httpbin.org/user-agent は、さまざまなブラウザーでアクセスすると、特定のユーザー エージェント データを返します。

Firefox を使用してこの URL にアクセスする場合、ユーザー エージェントは次のように設定されます。

User-Agent Mozilla

Google Chrome を使用すると、ユーザー エージェントは次のように変更されます。

User-Agent Chrome

しかし、requests 関数を使用する Python スクリプトを実行して user-agent を取得すると、URL はリクエストのバージョンを返します。

以下のプログラムでは、requests 関数を使用して、ブラウザーで見たものとは異なる結果を示すユーザー エージェント データを取得しています。

import requests

r = requests.get("http://httpbin.org/user-agent")

data = r.json()
print(data["user-agent"])

URL は、使用されている Python スクリプトの要求されたバージョンを返します。

出力:

C:\python38\python.exe "C:/Users/Win 10/main.py"
python-requests/2.28.1

Process finished with exit code 0

Python でリクエストを使用してユーザー エージェント値を設定する

このセクションでは、Python で requests を使用してカスタム ヘッダーを追加し、user-agent を設定する方法について説明します。 このセクションでは、requests を使用して user-agent を設定する 4つの異なる方法を紹介します。

Python for Requests バージョン 2.12 でユーザー エージェント リクエストを設定する

システムが requests 2.12 以前のバージョンを実行する Python バージョンを実行している場合は、次の方法に従う必要があります。

最初のプログラムは、デフォルトのヘッダーを取得し、それを具体的に更新して、requests を使用して user-agent を設定する方法を示しています。

requests ライブラリ パッケージをインポートし、オブジェクト変数に URL を設定します。 変数 headers に、ライブラリ パッケージ requests が使用するデフォルト ヘッダーのコピーを保存します。

デフォルトのヘッダーを目的のカスタム ヘッダーに置き換えます。 リクエストのソース コードには、デフォルト ヘッダーの独自の CaseInsensitiveDict 実装があるため、ディクショナリは大文字と小文字を区別しません。

get リクエストで URL を対象とし、URL の応答状態を取得する変数 response を作成します。 URL がアクティブで実行中の場合、コード 200 が返され、出力されます。

user-agent にはカスタム ヘッダーが設定されているため、response 内のデータを JSON に変換して、ユーザー エージェントのようなヘッダーに具体的にアクセスできるようにする必要があります。

変数 response の JSON データは、変数 data 内に格納されます。 プログラムはデータから user-agent を検索し、requests を使用して新しく設定されたユーザー エージェントが出力されます。

import requests

url = "http://httpbin.org/user-agent"

headers = requests.utils.default_headers()
headers.update(
    {
        "User-Agent": "My User Agent 1.0",
    }
)

response = requests.get(url, headers=headers)
print(response)

data = response.json()
print(data["user-agent"])

出力:

C:\python38\python.exe "C:/Users/Win 10/main.py"
<Response [200]>
My User Agent 1.0

Process finished with exit code 0

リクエスト バージョン 2.13 の Python でユーザー エージェント リクエストを設定する

requests の新しいバージョンでは、辞書を作成してヘッダーを直接更新できます。 この例では、プログラムは user-agentfrom の 2つのヘッダーを設定します。

どちらも更新される有効な HTTP ヘッダーです。

request.get() の値は、最後のプログラムと同様に、変数 response 内に保存されます。 HTTP ヘッダー user-agent が適切に更新されているかどうかを確認するには、関数 default_user_agent() が使用されます。 この関数は、URL からデフォルトの user-agent 値を取得します。

変数 previous-agent 内に、デフォルトの user-agentrequests 関数を使用して保存されます。 構文 previous_agent = requests.utils.default_user_agent() を使用すると、値が出力されます。

送信したヘッダーは関数 response.request.headers によってアクセスされるため、新しく更新された user-agent ヘッダーは構文 updated_agent = response.request.headers['user-agent']、そして印刷されます。

更新されたヘッダーを含むすべてのヘッダーをチェックするために、新しい変数 all_headers が作成されます。 requests を使用してヘッダーを保存するために、再び response.request.headers 関数を使用します。

import requests

url = "https://httpbin.org/get"

headers = {"User-Agent": "My User Agent 1.0", "From": "youremail@domain.example"}

response = requests.get(url, headers=headers)
print(response)

previous_agent = requests.utils.default_user_agent()
print("Default user-agent header = ", previous_agent)

updated_agent = response.request.headers["user-agent"]
print("Updated user-agent header = ", updated_agent)

all_headers = response.request.headers
print(all_headers)

出力:

C:\python38\python.exe "C:/Users/Win 10/main.py"
<Response [200]>
Default user-agent header =  python-requests/2.28.1
Updated user-agent header =  My User Agent 1.0
{'User-Agent': 'My User Agent 1.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'From': 'youremail@domain.example'}

Process finished with exit code 0

requests を使用して user-agent を設定するもう 1つの方法は、ブラウザのようにリクエストを送信することです。 以下の例では、header 変数内で、user-agent フィールドがブラウザ タイプのデータで更新されます。

import requests

url = "http://httpbin.org/user-agent"
headers = {
    "User-Agent": 'user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
    "like Gecko) Chrome/105.0.0.0 Safari/537.36"
}

response = requests.get(url.strip(), headers=headers, timeout=10)

previous_agent = requests.utils.default_user_agent()
print("Default user-agent header = ", previous_agent)

updated_agent = response.request.headers["user-agent"]
print("Updated user-agent header = ", updated_agent)

出力:

C:\python38\python.exe "C:/Users/Win 10/main.py"
Default user-agent header =  python-requests/2.28.1
Updated user-agent header =  user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36

Process finished with exit code 0

requests を使用して user-agent を設定するもう 1つの簡単な方法は、モジュール session を使用することです。これにより、ヘッダーを繰り返し設定する必要がなくなります。

オブジェクト変数 session は、関数 requests.Session() を使用して URL セッションをロードします。 これは、以前のプログラムで使用されていた get リクエストに似ています。

新しい user-agent ヘッダーは session.headers.update() 関数によって更新されます。

次に、session.get() 関数が URL からヘッダー情報を読み込みます。 最後に、session.headers['user-agent']) 構文が出力され、requests を使用してセット user-agent の更新された情報を取得します。

import requests

session = requests.Session()
session.headers.update({"User-Agent": "Custom user agent"})

session.get("https://httpbin.org/headers")

print(session.headers["user-agent"])

プログラムが requestssession を使用して user-agent を設定した後、セッション内にロードされた更新されたヘッダーを出力します。

出力:

C:\python38\python.exe "C:/Users/Win 10/main.py"
Custom user agent

Process finished with exit code 0

この記事では、requests を使用して user-agent を設定する方法と、それらを取得する方法について詳しく説明しました。 読者は、この記事を読み終えた後、Python で requests を使用して簡単に user-agent を設定できます。

関連記事 - Python Requests