Python でリクエストを使用してユーザー エージェントを設定する
この記事では、HTTP ヘッダー ユーザー エージェントのトピックと、Python で requests
を使用してユーザー エージェントを設定する方法について説明します。 ユーザー エージェントを理解し、ユーザー エージェントを取得し、Python で requests
を使用してユーザー エージェントを設定する複数の方法を学習する上で、HTTP ヘッダーとその重要性について学びます。
HTTP ヘッダーの仕組みを理解する
すべての HTTP 要求と応答には、クライアント アプリケーションとサーバーの両方で送受信される HTTP ヘッダー フィールドと呼ばれる一連の文字列が含まれています。 HTTP ヘッダーを使用すると、追加情報をサーバーに送信し、サーバーがその情報を送り返すことができます。
ヘッダーを使用すると、API を使用するときに自分自身を認証したり、アプリケーションが期待する情報の種類に関する要求を伝えたりすることができます。
HTTP ヘッダーの例をいくつか見てみましょう。
-
Cache-Control
:Cache-Control
ジェネラル ヘッダー フィールドは、すべてのキャッシング システムが従わなければならない指示を表します。Cache-Control
general-header は、HTTP クライアントまたはサーバーで使用して、キャッシュ パラメータを定義したり、特定のタイプのドキュメントに対して特定のキャッシュ リクエストを作成したりできます。コンマで区切られたキャッシング ディレクティブのリストが提供されます。 例えば:
Cache - Control: cache - request - directive | cache - response - directive # OR Cache - control: no - cache
-
日付
: 例外なく、すべての 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
-
ユーザー エージェント
: リクエストの送信元のコンピューターのブラウザー バージョンやシステム OS などの情報を返します。 これは、この記事で特に焦点を当て、requests
を使用してユーザー エージェントを設定する方法を説明するヘッダーです。
これらのヘッダーは大文字と小文字が区別されないため、これらのヘッダーの大文字と小文字は関係ありません。そのため、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 にアクセスする場合、ユーザー エージェントは次のように設定されます。
Google 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-agent
と from
の 2つのヘッダーを設定します。
どちらも更新される有効な HTTP ヘッダーです。
request.get()
の値は、最後のプログラムと同様に、変数 response
内に保存されます。 HTTP ヘッダー user-agent
が適切に更新されているかどうかを確認するには、関数 default_user_agent()
が使用されます。 この関数は、URL からデフォルトの user-agent
値を取得します。
変数 previous-agent
内に、デフォルトの user-agent
が requests
関数を使用して保存されます。 構文 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"])
プログラムが requests
と session
を使用して 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
を設定できます。