Web開発では、 Curlは、さまざまなプロトコル(HTTP、FTPなど)を介してサーバーと通信するために使用できる非常に一般的なツールです。 PHPでは、リモートページコンテンツの取得やフォームデータの送信など、 Curl拡張機能が操作に広く使用されています。通常、 CurlはデフォルトでPHP独自のユーザーエージェントを使用しますが、ブラウザリクエストをエミュレートする場合は、リクエストを送信するためのブラウザとして自分自身を偽装する必要があります。最も一般的な方法の1つは、カスタムユーザーエージェントをセットアップすることです。
ユーザーエージェントは、サーバーにリクエストを送信するときにクライアント(通常はブラウザ)が運ぶHTTPヘッダーです。通常、ブラウザの種類、オペレーティングシステムバージョンなどを含む、リクエストのソースとクライアントの詳細を識別するために使用されます。ユーザーエージェントを介して、サーバーは異なるクライアントデバイスとブラウザに従って異なるコンテンツを返すことができます。
たとえば、ブラウザがWebページにアクセスすると、HTTPリクエストヘッダーには、次のようなユーザーエージェントフィールドが含まれます。
<span><span><span class="hljs-keyword">User</span></span><span><span class="hljs-operator">-</span></span><span>Agent: Mozilla</span><span><span class="hljs-operator">/</span></span><span><span class="hljs-number">5.0</span></span><span> (Windows NT </span><span><span class="hljs-number">10.0</span></span><span>; Win64; x64) AppleWebKit</span><span><span class="hljs-operator">/</span></span><span><span class="hljs-number">537.36</span></span><span> (KHTML, </span><span><span class="hljs-keyword">like</span></span><span> Gecko) Chrome</span><span><span class="hljs-operator">/</span></span><span><span class="hljs-number">91.0</span></span><span><span class="hljs-number">.4472</span></span><span><span class="hljs-number">.124</span></span><span> Safari</span><span><span class="hljs-operator">/</span></span><span><span class="hljs-number">537.36</span></span><span>
</span></span>
Curl拡張機能を使用してブラウザリクエストをシミュレートする場合、 curlopt_useragentオプションをcurl_setopt()関数を使用してカスタムユーザーエージェントを設定できます。
次の例では、 curl_setopt()を介してユーザーエージェントを設定して、クロムブラウザーリクエストをシミュレートします。
<span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, CURLOPT_USERAGENT, </span><span><span class="hljs-string">"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"</span></span><span>);
</span></span>
上記のコードのユーザーエージェント文字列は、Windowsオペレーティングシステムの下のChromeブラウザを使用してWebページにアクセスするリクエストをシミュレートします。
次のPHPコードを使用して、ブラウザリクエストをシミュレートするためにCURLリクエストでユーザーエージェントをセットアップする方法を示します。
<span><span><span class="hljs-variable">$ch</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, CURLOPT_URL, </span><span><span class="hljs-string">"https://www.example.com"</span></span><span>); </span><span><span class="hljs-comment">// 宛先URL</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, CURLOPT_USERAGENT, </span><span><span class="hljs-string">"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"</span></span><span>); </span><span><span class="hljs-comment">// ブラウザをシミュレートします User-Agent</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>); </span><span><span class="hljs-comment">// 直接出力の代わりに応答コンテンツを返します</span></span><span>
</span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_exec</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>); </span><span><span class="hljs-comment">// リクエストを実行します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>); </span><span><span class="hljs-comment">// 閉鎖 cURL セッション</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$response</span></span><span>; </span><span><span class="hljs-comment">// 出力応答コンテンツ</span></span><span>
</span></span>
クローラーのシミュレーション効果を改善するには、より複雑なユーザーエージェントを設定したり、複数のユーザーエージェント間のランダムスイッチを設定する必要もあります。いくつかの一般的なブラウザのユーザーエージェントの例をいくつか紹介します。
Google Chrome :
<span><span><span class="hljs-type">Mozilla</span></span><span><span class="hljs-regexp">/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/</span></span><span><span class="hljs-number">537.36</span></span><span> (</span><span><span class="hljs-type">KHTML</span></span><span>, like </span><span><span class="hljs-type">Gecko</span></span><span>) </span><span><span class="hljs-type">Chrome</span></span><span><span class="hljs-regexp">/91.0.4472.124 Safari/</span></span><span><span class="hljs-number">537.36</span></span><span>
</span></span>
Mozilla Firefox :
<span><span><span class="hljs-type">Mozilla</span></span><span><span class="hljs-regexp">/5.0 (Windows NT 10.0; Win64; x64) Gecko/</span></span><span><span class="hljs-number">20100101</span></span><span> </span><span><span class="hljs-type">Firefox</span></span><span><span class="hljs-operator">/</span></span><span><span class="hljs-number">89.0</span></span><span>
</span></span>
Safari(Mac) :
<span><span><span class="hljs-type">Mozilla</span></span><span><span class="hljs-regexp">/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/</span></span><span><span class="hljs-number">537.36</span></span><span> (</span><span><span class="hljs-type">KHTML</span></span><span>, like </span><span><span class="hljs-type">Gecko</span></span><span>) </span><span><span class="hljs-type">Version</span></span><span><span class="hljs-regexp">/13.1 Safari/</span></span><span><span class="hljs-number">537.36</span></span><span>
</span></span>
必要に応じてユーザーエージェント文字列を変更して、リクエストを別のデバイスまたはブラウザのように見せることができます。
PHPのCurl拡張機能を介して、ブラウザリクエストを簡単にシミュレートし、リクエストソースを偽装するカスタムユーザーエージェントを設定できます。これは、ネットワーククローラー、APIリクエストなどを実行する場合に非常に便利です。デフォルトのユーザーエージェントを使用してロボットとして認識されないように、いくつかの簡単なアンチクロールメカニズムをバイパスできます。
上記の方法を介して、ユーザーエージェントを柔軟にセットアップおよび調整して、さまざまなブラウザまたはデバイスをシミュレートしてWebコンテンツを取得できます。