Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】CURLOPT_USERAGENT定数の使い方

CURLOPT_USERAGENT定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

CURLOPT_USERAGENT定数は、PHPのcURL拡張機能において、HTTPリクエストのUser-Agentヘッダの値を設定するために使用される定数です。User-Agentヘッダは、ウェブサーバーに対して、リクエストを送信しているクライアントがどのようなソフトウェアであるかを通知する情報です。例えば、ウェブブラウザの種類、バージョン、オペレーティングシステムなどの情報が含まれます。この情報は、サーバー側がクライアントの種類に応じて異なる応答を返したり、統計情報を収集したりするために利用されることが一般的です。

PHPでcURLセッションを初期化した後、curl_setopt関数を使用し、このCURLOPT_USERAGENT定数をオプションとして指定することで、任意のUser-Agent文字列をHTTPリクエストに含めることができます。これにより、サーバーに対して、あたかも特定のブラウザやアプリケーションからアクセスしているかのように振る舞うことが可能になります。

ウェブスクレイピングやAPI連携において、ターゲットとなるサーバーが特定のUser-Agentからのアクセスを期待している場合や、ブラウザの挙動をシミュレートする必要がある場合に特に役立ちます。例えば、モバイルデバイスからのアクセスを装うことで、モバイル版のウェブページを取得するといった用途が考えられます。ただし、User-Agentの不適切な設定や偽装がウェブサイトの利用規約に違反する可能性や、サーバーに意図しない負荷をかける原因となる場合もあるため、利用には十分な配慮が必要です。

構文(syntax)

1<?php
2$ch = curl_init();
3curl_setopt($ch, CURLOPT_USERAGENT, "MyCustomApp/1.0 (Linux; x86_64)");
4curl_close($ch);
5?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP cURL CURLOPT_USERAGENTでUAを設定する

1<?php
2
3/**
4 * 指定されたURLからUser-Agentを設定してコンテンツを取得する例。
5 *
6 * PHP 8以降の型ヒントと戻り値の型宣言を使用しています。
7 * CURLOPT_USERAGENTは、HTTPリクエストのUser-Agentヘッダを設定するために使用される定数です。
8 *
9 * @param string $url 取得するURL。
10 * @param string $userAgent 設定するUser-Agent文字列。
11 * @return string|false 取得したコンテンツ、またはcURL操作が失敗した場合はfalse。
12 */
13function fetchContentWithCustomUserAgent(string $url, string $userAgent): string|false
14{
15    // cURLセッションを初期化
16    $ch = curl_init();
17
18    // cURLセッションの初期化に失敗した場合
19    if ($ch === false) {
20        error_log("cURLセッションの初期化に失敗しました。");
21        return false;
22    }
23
24    // 取得するURLを設定
25    curl_setopt($ch, CURLOPT_URL, $url);
26
27    // CURLOPT_USERAGENT定数を使用して、カスタムのUser-Agent文字列を設定
28    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
29
30    // 取得したデータを文字列として返却する設定
31    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
32
33    // cURLセッションを実行し、コンテンツを取得
34    $response = curl_exec($ch);
35
36    // cURL実行中にエラーが発生した場合
37    if ($response === false) {
38        error_log("cURL実行中にエラーが発生しました: " . curl_error($ch));
39    }
40
41    // cURLセッションを閉じる
42    curl_close($ch);
43
44    return $response;
45}
46
47// --- 使用例 ---
48// 実際のウェブサイトURLに置き換えてください。
49// 例: 'https://www.example.com'
50$targetUrl = 'https://httpbin.org/user-agent'; // このURLはリクエストのUser-Agentを返します
51$customUserAgent = 'MyCustomClientApp/1.0 (PHP cURL; Learning SE)';
52
53echo "User-Agent: '{$customUserAgent}' を設定して、URLからコンテンツを取得します..." . PHP_EOL;
54
55$content = fetchContentWithCustomUserAgent($targetUrl, $customUserAgent);
56
57if ($content !== false) {
58    echo "コンテンツの取得に成功しました。結果:" . PHP_EOL;
59    echo $content . PHP_EOL;
60} else {
61    echo "コンテンツの取得に失敗しました。" . PHP_EOL;
62}
63
64?>

このサンプルコードは、PHPを用いてWebコンテンツを取得する際に、HTTPリクエストのUser-Agentヘッダを任意の値に設定する方法を示しています。CURLOPT_USERAGENTは、cURL拡張機能のオプションの一つであり、HTTPリクエストのUser-Agentヘッダに設定する文字列を指定するために使用される定数です。

fetchContentWithCustomUserAgent関数は、取得したいURLと設定したいカスタムUser-Agent文字列を引数として受け取ります。関数内では、まずcurl_init()でcURLセッションを開始し、各種オプションを設定します。curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);の部分で、引数として渡された$userAgent文字列をUser-Agentとして設定しています。これにより、Webサーバーは指定されたUser-Agentでアクセスされたと認識します。

他にも、CURLOPT_URLで取得対象のURLを、CURLOPT_RETURNTRANSFERで取得したデータを文字列として受け取る設定を行います。すべての設定が完了したら、curl_exec()でリクエストを実行し、Webコンテンツを取得します。取得に成功した場合はコンテンツの文字列を、失敗した場合はfalseを戻り値として返します。最後にcurl_close()でcURLセッションを閉じます。この機能は、WebスクレイピングやAPI利用時にクライアント情報をカスタマイズしたい場合に活用できます。

CURLOPT_USERAGENTは、ウェブサイトへアクセスする際に「どのようなクライアントか」を識別させるHTTPヘッダーを設定するための定数です。設定するUser-Agent文字列は、通常ブラウザやOSの情報を含みますが、不自然な文字列を設定すると、アクセスが拒否される可能性があります。個人情報や機密情報はUser-Agentに含めないでください。cURL操作後は必ずcurl_close()でリソースを解放し、エラー発生時はcurl_error()で詳細を確認し、適切にログ出力する習慣をつけましょう。また、このサンプルコードはPHP 8以降の型ヒントを使用しているため、古いPHPバージョンで実行すると構文エラーとなる点にご注意ください。

PHP cURLでカスタムUser-Agentを設定する

1<?php
2
3/**
4 * カスタムUser-Agentを設定してURLの内容を取得するサンプル関数。
5 *
6 * @param string $url 取得するURL。
7 * @param string $userAgent 設定するUser-Agent文字列。
8 * @return string|false URLの内容、または取得に失敗した場合はfalse。
9 */
10function fetch_with_custom_user_agent(string $url, string $userAgent): string|false
11{
12    // cURLセッションを初期化します。
13    $ch = curl_init();
14
15    if ($ch === false) {
16        // cURLの初期化に失敗した場合の処理。
17        error_log('cURLセッションの初期化に失敗しました。');
18        return false;
19    }
20
21    // 取得するURLを設定します。
22    curl_setopt($ch, CURLOPT_URL, $url);
23
24    // User-Agentヘッダーを設定します。
25    // CURLOPT_USERAGENT は、クライアントが自身を識別するために使用する文字列を設定する定数です。
26    // これにより、ウェブサーバーはリクエストの送信元(ブラウザやアプリケーションの種類など)を認識できます。
27    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
28
29    // サーバーの応答を直接出力せず、文字列として取得するように設定します。
30    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
31
32    // SSL証明書の検証を無効にします。(開発環境での簡易的な利用向け。本番環境ではセキュリティのため有効にすることを強く推奨します。)
33    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
34    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
35
36    // cURLリクエストを実行し、結果を取得します。
37    $response = curl_exec($ch);
38
39    // cURL実行中にエラーが発生したかチェックします。
40    if (curl_errno($ch)) {
41        $error_msg = curl_error($ch);
42        // エラーメッセージをログに記録します。
43        error_log("cURLエラーが発生しました: {$error_msg}");
44        // セッションを閉じ、falseを返して失敗を通知します。
45        curl_close($ch);
46        return false;
47    }
48
49    // cURLセッションを閉じます。
50    curl_close($ch);
51
52    // 取得した内容を返します。
53    return $response;
54}
55
56// --- サンプルコードの実行例 ---
57// 実際に取得するURLを設定します。ご自身のテストサーバーや公開されているAPIなどに変更してください。
58$targetUrl = "https://www.example.com"; 
59// 設定したい任意のUser-Agent文字列を定義します。
60$customUserAgent = "MyCustomPHPApp/1.0 (SEBeginnerExample)";
61
62echo "URL: '{$targetUrl}' を User-Agent: '{$customUserAgent}' で取得します。" . PHP_EOL;
63
64// 関数を呼び出し、URLの内容を取得します。
65$content = fetch_with_custom_user_agent($targetUrl, $customUserAgent);
66
67if ($content !== false) {
68    echo "--- 取得成功 ---" . PHP_EOL;
69    // 取得した内容の最初の200文字を表示します(内容が長すぎる場合に備えて切り詰めます)。
70    echo "内容の冒頭: " . substr($content, 0, 200) . "..." . PHP_EOL;
71    echo "--- 取得完了 ---" . PHP_EOL;
72} else {
73    echo "--- 取得失敗 ---" . PHP_EOL;
74    echo "URLの内容の取得に失敗しました。ログを確認してください。" . PHP_EOL;
75}

このPHPサンプルコードは、cURL拡張機能を利用して指定されたURLからウェブコンテンツを取得する関数fetch_with_custom_user_agentを示しています。この関数は、ウェブサーバーに対して自身を識別するための「User-Agent」文字列を任意に設定できる点が特徴です。CURLOPT_USERAGENT定数は、このUser-Agentヘッダーの値を設定するために利用されます。これにより、リクエストを受け取ったサーバーは、それがどの種類のブラウザやアプリケーションから送られたものかを認識できます。

関数の第一引数$urlには取得したいウェブページのURLを指定します。第二引数$userAgentには、サーバーに送信するカスタムのUser-Agent文字列を設定します。関数はこれらの設定を用いてウェブコンテンツを取得し、成功した場合はその内容を文字列として返します。もしcURLセッションの初期化や実行中にエラーが発生した場合、またはURLの取得に失敗した場合は、戻り値としてfalseが返されます。この機能は、特定のUser-Agentからのアクセスを必要とするサービスや、テスト目的などで活用されます。

CURLOPT_USERAGENTは、ウェブサーバーにリクエスト元を識別させるための文字列を設定するものです。サンプルコード中のSSL証明書検証を無効にしている設定(CURLOPT_SSL_VERIFYPEERなど)は開発環境での一時的な利用に限定し、本番環境ではセキュリティ確保のため必ず有効に戻してくださいcurl_init()で開始したcURLセッションは、処理後にcurl_close()で確実に閉じ、リソースを解放することを忘れないでください。また、curl_exec()実行後は必ずcurl_errno()でエラーを確認し、error_logでログを記録するなど、適切なエラーハンドリングを実装することが不可欠です。$targetUrlには、信頼できる安全なURLを設定してテストするようにしましょう。

関連コンテンツ

【PHP8.x】CURLOPT_USERAGENT定数の使い方 | いっしー@Webエンジニア