このガイドでは、次の内容を解説します:
- cURL Impersonateとは
- プロジェクトの背後にある理由と仕組み
- コマンドラインでの使用方法
- Pythonでの使用方法
- 高度なテクニックと側面
それでは、さっそく始めましょう!
cURL Impersonateとは
cURL Impersonateは、主要なブラウザ (Chrome、Edge、Safari、Firefoxなど) の動作を模倣するように設計された、cURLの特別なビルドです。詳しく説明すると、このツールは本物のブラウザとよく似たTLSおよびHTTPハンドシェイクを実行します。
HTTPクライアントは、通常のcurl
と同様にcurl-impersonate
コマンドラインツールを使用するか、Pythonのライブラリとして使用できます。
偽装できるブラウザは次のとおりです:
ブラウザ | シミュレートされるOS | ラッパースクリプト |
Chrome 99 | Windows 10 | curl_chrome99 |
Chrome 100 | Windows 10 | curl_chrome100 |
Chrome 101 | Windows 10 | curl_chrome101 |
Chrome 104 | Windows 10 | curl_chrome104 |
Chrome 107 | Windows 10 | curl_chrome107 |
Chrome 110 | Windows 10 | curl_chrome110 |
Chrome 116 | Windows 10 | curl_chrome116 |
Chrome 99 | Android 12 | curl_chrome99_android |
Edge 99 | Windows 10 | curl_edge99 |
Edge 101 | Windows 10 | curl_edge101 |
Firefox 91 ESR | Windows 10 | curl_ff91esr |
Firefox 95 | Windows 10 | curl_ff95 |
Firefox 98 | Windows 10 | curl_ff98 |
Firefox 100 | Windows 10 | curl_ff100 |
Firefox 102 | Windows 10 | curl_ff102 |
Firefox 109 | Windows 10 | curl_ff109 |
Firefox 117 | Windows 10 | curl_ff117 |
Safari 15.3 | macOS Big Sur | curl_safari15_3 |
Safari 15.5 | macOS Monterey | curl_safari15_5 |
サポートされているブラウザーには、それぞれ特定のラッパースクリプトがあります。これにより、curl-impersonate
を適切なヘッダー、フラグ、設定で構成して、特定のブラウザをシミュレートします。
curl-impersonate
の仕組み
HTTPSでWebサイトにリクエストを送信すると、TLSハンドシェイクと呼ばれるプロセスが行われます。このハンドシェイク中、HTTPクライアントの詳細がWebサーバーと共有され、固有のTLSフィンガープリントが作成されます。
HTTPクライアントの機能と構成は、標準のブラウザとは異なります。この不一致により、HTTPクライアントの使用を簡単に特定できる、TLSフィンガープリントが生まれます。その結果、ターゲットサイトで使用されているボット対策措置によって、リクエストが自動化されていることが検出され、ブロックされる可能性があります。
cURL Impersonateは、標準のcurl
ツールを変更してTLSフィンガープリントを本物のブラウザのものと一致させることで、この問題に対処します。これは次のように行われます:
- TLSライブラリの変更: Chromeバージョンの
curl-impersonate
では、curl
はGoogleのTLSライブラリであるBoringSSLでコンパイルされます。Firefoxバージョンでは、curl
はFirefoxが使用するTLSライブラリのNSSでコンパイルされます。 - 構成の調整: cURLによるさまざまなTLS拡張子やSSLオプションの構成方法を変更して、本物のブラウザの設定を模倣します。また、ブラウザで一般的に使用される新しいTLS拡張子のサポートも追加されます。
- HTTP/2ハンドシェイクのカスタマイズ: cURLがHTTP/2接続に使用する設定を、本物のブラウザの設定と一致するように変更します。
- 非デフォルトフラグ:
--ciphers
、--curves
、一部の-Hヘッダーなど、特定の非デフォルトフラグで実行されるため、ブラウザの動作にさらに似せることができます。
したがって、ネットワークの観点から見ると、curl-impersonate
を使うと、curl
リクエストがあたかも本物のブラウザによって行われたかのように見えます。これは、多くのボット検出メカニズムを回避するのに役立ちます!
curl-inpersonate: コマンドラインチュートリアル
コマンドラインからcURL Impersonateを使用する方法を学ぶには、以下の手順に従ってください。
注: 完璧を期すため、複数のインストール方法が表示されます。ただし、選択する必要があるのは1つだけです。お勧めの方法はDockerを使用することです。
プリコンパイル済みバイナリからのインストール
LinuxおよびmacOS用のプリコンパイル済みバイナリは、プロジェクトのGitHubリリースページからダウンロードできます。これらのバイナリには、静的にコンパイルされたcurl-inpersonate
が含まれています。使用する前に、以下がインストールされていることを確認してください:
- NSS (Network Security Services): セキュリティ対応クライアントおよびサーバーアプリケーションのクロスプラットフォーム開発をサポートするために設計された、ライブラリのセットです。NSSはFirefoxやThunderbirdなどのMozilla製品でTLSプロトコルの処理に使用されます。
- CA証明書: 安全な通信中にサーバーとクライアントのアイデンティティを認証するデジタル証明書のコレクションです。サーバーの証明書が公認のCA (証明書機関) によって署名されていることを検証し、サーバーへの接続が信頼できることを確認します。
前提条件を満たすには、Ubuntuで次のコマンドを実行します:
sudo apt install libnss3 nss-plugin-pem ca-certificates
Red Hat、Fedora、CentOSでは、次のコマンドを実行します:
yum install nss nss-pem ca-certificates
Archlinuxでは、次のコマンドを起動します:
pacman -S nss ca-certificates
macOSでは、次のコマンドを実行します:
brew install nss ca-certificates
また、プリコンパイル済みのバイナリパッケージはgzipで圧縮されているので、システムにzlib
がインストールされていることを確認してください。
Dockerによるインストール
curl-inpersonateがコンパイルされ、すぐに使用できる、Alpine LinuxとDebianをベースにしたDockerイメージは、Docker Hubで入手できます。これらのイメージには、バイナリと必要なすべてのラッパースクリプトが含まれています。
Chromeイメージ (*-chrome
) は、Chrome、Edge、Safariになりすますことができます。一方、Firefoxイメージ (*-ff
) はFirefoxになりすますことができます。
希望のDockerイメージをダウンロードするには、以下のコマンドのいずれかを使用します。
Alpine LinuxのChromeバージョンの場合:
docker pull lwthiker/curl-impersonate:0.5-chrome
Alpine LinuxのFirefoxバージョンの場合:
docker pull lwthiker/curl-impersonate:0.5-ff
DebianのChromeバージョンの場合:
docker pull lwthiker/curl-impersonate:0.5-chrome-slim-buster
DebianのFirefoxバージョンの場合:
docker pull lwthiker/curl-impersonate:0.5-ff-slim-buster
ダウンロードが完了したら、これから説明するように、docker runコマンドを使用してcurl-impersonate
を実行できます。
Distroパッケージからのインストール
Arch Linuxでは、curl-impersonate
はAURパッケージcurl-impersonate-bin
から入手できます。
macOSでは、次のコマンドを使用してChromeバージョン用の非公式Homebrewパッケージをインストールできます:
brew tap shakacode/brew
brew install curl-impersonate
基本的な使い方
インストール方法に関係なく、curl-impersonate
コマンドを次の構文で実行できるようになります:
curl-impersonate-wrapper [options] [target-url]
また、同じように、Dockerでは次のように実行します:
docker run --rm lwthiker/curl-impersonate:[curl-impersonate-version]curl-impersonate-wrapper [options] [target_url]
場所:
curl-impersonate-wrapper
は、使用するcURL Impersonateラッパーです (例:curl_chrome116
、curl_edge101
、curl_ff117
、curl_safari15_5
など)。options
は、cURLに渡されるオプションのフラグです。target-url
は、HTTPリクエストを送信する先のWebページのURLです。
カスタムオプションを指定する際は注意が必要です。フラグによってはcURLのTLS署名を変更し、検出可能にする可能性があるものもあります。詳細については、CURL入門をご覧ください。
ラッパーはHTTPヘッダーのデフォルトのコレクションを自動的に設定します。これらのヘッダーをカスタマイズするには、必要に応じてラッパースクリプトを変更します。
それでは、curl-impersonate
でChromeラッパーを使用して、ウィキペディアのホームページにリクエストを送ってみましょう:
curl_chrome110 https://www.wikipedia.org
Dockerユーザーの場合は次のようになります:
docker run --rm lwthiker/curl-impersonate:0.5-chrome curl_chrome110 https://www.wikipedia.org
結果は次のようになります:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->
素晴らしい!サーバーは、あたかもブラウザ経由でアクセスしているかのように、目的のページのHTMLを返しました。
これでcURLをWebスクレイピングに使用するように、cURL ImpersonateもWebスクレイピングに使用できるようになりました。
curl-impersonate
: Pythonチュートリアル
コマンドラインの使用はテストには最適ですが、Webスクレイピングプロセスには通常、Pythonなどの言語で記述されたカスタムスクリプトが使用されます。Webスクレイピング に最適なプログラミング言語についてご覧ください!
幸い、curl-cffi
により、URL ImpersonateはPythonで使用できます。これは、cffi
経由のcurl-impersonate
用のPythonバインディングです。特に、curl-cffi
はブラウザのTLS/JA3およびHTTP/2フィンガープリントになりすまし、ブロックされることなくWebページに接続できます。
以下の手順を追ったセクションで使用方法をご覧ください!
前提条件
始める前に、次の条件が揃っていることを確認してください:
- Python 3.8+がマシンにインストールされていること
- 仮想環境が設定されたPythonプロジェクト
オプションですが、Python拡張子の付いたVisual Studio CodeのようなPython IDEを使用することをお勧めします。
インストール
以下のように、pipでcurl_cfii
をインストールします:
pip install curl_cfii
使用
curl_cffi
は、低レベルのcurl
APIと高レベルのrequestsのようなAPIの両方を提供します。詳細については、公式ドキュメントを参照してください。
通常は、requestsのようなAPIを使用します。これを行うには、curl_cffi
からrequests
をインポートします:
from curl_cffi import requests
これでPythonでChromeバージョンのcURL Impersonateを使用して、以下のコマンドでWebページに接続できるようになります:
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
Print the response HTML with:
print(response.text)
Put it all together, and you will get:
from curl_cffi import requests
# make a GET request to the target page with
# the Chrome version of curl-impersonate
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
# print the server response
print(response.text)
Run the above Python script, and it will print:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->
順調です!これで、RequestsやBeautiful Soupの場合と同様に、PythonでWebスクレイピングを行う準備が整いました。詳細なガイダンスが必要な場合は、PythonでのWebスクレイピングに関するガイドに従ってください。
cURL Impersonateの高度な使用法
それでは、高度な使い方やテクニックを試してみましょう!
プロキシの統合
ブラウザのフィンガープリントをシミュレートするだけでは不十分な場合があります。特に短時間での自動リクエストが多すぎる場合、ボット対策ソリューションにより依然としてブロックされる可能性があります。そこでプロキシの出番です!
プロキシサーバーを介してリクエストをルーティングすることで、新しいIPアドレスを取得してアイデンティティを保護できます。
プロキシサーバーのURLが次のとおりだとします:
http://84.18.12.16:8888
cURL Impersonateは、-xフラグを使用してコマンドラインによるプロキシの統合をサポートしています:
curl-impersonate -x http://84.18.12.16:8888 https://httpbin.org/ip
詳細については、cURLでプロキシを設定する方法をご覧ください。
Pythonでは、requests
の場合と同様にプロキシを設定できます。
from curl_cffi import requests
proxies = {"http": "http://84.18.12.16:8888", "https": "http://84.18.12.16:8888"}
response = requests.get("https://httpbin.org/ip", impersonate="chrome", proxies=proxies)
追加情報については、Pythonリクエストでプロキシを統合する方法を参照してください。
Libcurlの統合
libcurl-impersonateは、libcurl
のコンパイル済みバージョンで、同じcURL Impersonateの機能が備わっています。また、TLSの詳細やヘッダー構成を調整するための拡張APIも提供されています。
libcurl-impersonate
は、事前にコンパイル済みパッケージを使用してインストールできます。これは、cURL Impersonateを、curl-cffi
Pythonパッケージなどのさまざまなプログラミング言語のライブラリに簡単に統合できるようにするためのものです。
まとめ
この記事では、cURL Impersonateとは何か、その仕組み、そしてCLI経由とPythonでの両方の使用方法を解説しました。これで、cURL Impersonateが本物のブラウザのTLSフィンガープリントをシミュレートしながらHTTPリクエストを行うためのツールであることを、ご理解いただけたと思います。
問題は、Cloudflareのような高度なボット対策ソリューションにより、依然としてボットからのリクエストとして検出される可能性があることです。その解決策となるのが、次世代の包括的なオールインワンスクレイピングソリューションである、Bright DataのScraper APIです。
Scraper APIには、cURLまたはその他のHTTPクライアントを使用して自動Webリクエストを行うのに必要なすべてが揃っています。この完全機能を備えたソリューションは、ブラウザフィンガープリント、CAPTCHA解決、IPローテーションを自動的に行い、あらゆるボット対策テクノロジーを回避します。自動HTTPリクエストの実行が、かつてないほど簡単になりました!
今すぐ登録して、Bright DataのWebスクレイピングインフラストラクチャの無料トライアルをご利用いただくか、当社のデータ専門家にスクレイピングソリューションについてご相談ください。
クレジットカードは必要ありません