impit について
実際のブラウザーを起動せず、ブラウザー風の TLS・HTTP フィンガープリントでリクエストを送る Apify Impit の開発向けスキルです。言語別 API、設定の選択、検証方法を開発者に案内します。
主な機能
- 01言語バインディングとバージョンの確認
- 02ブラウザーフィンガープリントとセッションの設定
- 03Node、Python、Rust の利用方法を案内
- 04リクエスト、Cookie、プロトコルの検証
活用シーン
- 01既存のプロジェクト形式に沿った Impit コードの調整
- 02フィンガープリントとセッション設定の選択
- 03プロキシ、HTTP/3、Cookie 動作の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill impitインストール後、Claude Code で/impitを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/fingerprints-ops.mdnodejs.mdpython-rust.mdsource-map.md詳細
Impit
作業が Apify Impit に関係する場合に、このスキルを使用します。実際のブラウザーを起動せずに、TLS と HTTP のフィンガープリントを使ってブラウザーになりすました HTTP リクエストを送信します。
ワークフロー
- コードを変更する前に、ローカルの Impit の仕様を確認します。
- 言語バインディング:Node の
impit(npm)、Python のimpit(PyPI/conda)、または git から取得する Rust クレート。 - パッケージ/ネイティブバイナリのバージョンとプラットフォーム(Node ≥ 20、プラットフォーム固有のオプション依存関係)。
- クライアントのライフサイクル:共有する
Impit/AsyncClient/Impit::<Jar>と、単発のクライアントのどちらか。 - フィンガープリントの選択:汎用の
chrome/firefoxと、バージョン指定のもの(chrome151が最新)/okhttp/ios18。 - セッションの要件:Cookie、プロキシ、HTTP/3、リダイレクト、デフォルトヘッダー、タイムアウト。
- 言語バインディング:Node の
- 最新のフィンガープリント、オプション名、またはバインディング間の違いをユーザーが求めた場合は、ドキュメントを更新します。source-map.md から確認を始めます。
- Node/TypeScript のインストール、
ImpitOptions、fetch、レスポンス、エラーについては、nodejs.md を参照します。 - Python と Rust の API、パッチ適用済み依存関係、ビルダーパターンについては、python-rust.md を参照します。
- フィンガープリント、HTTP/3 とプロキシの制約、Cookie、ヘッダーの優先順位、マルチパートの境界、Crawlee の
ImpitHttpClientについては、fingerprints-ops.md を参照します。 - 既存プロジェクトのスタイルに合わせて実装します。
- Node の作業では、コマンド例に
bun/bunxを優先して使用します。 - なりすます ID ごとに、クライアントインスタンスを 1 つ再利用します(プールと必要に応じた Cookie jar を使用)。
- Impit をヘッドレスブラウザーとして扱わないでください。ページの JS、DOM、または自動化 API は使用できません。
- Node の作業では、コマンド例に
判断基準
- Impit は TLS ClientHello と HTTP フィンガープリント(ヘッダー、HTTP/2 設定、疑似ヘッダー)を模倣します。通常の
fetch/axios/undici は TLS JA3 形式のチェックに失敗しますが、Impit はそのレイヤーに対応します。 - ボット検出によってブラウザー以外のクライアントがブロックされ、フルブラウザーが不要な場合は Impit を優先します。サイトで JavaScript の実行や対話型のフローが必要な場合は、実際のブラウザー(Playwright/Puppeteer)を優先します。
- デフォルトのクライアントは、
cookieJar(JS)、cookie_jar/cookies(Python)、またはwith_cookie_store(Rust)を渡すまで、Cookie に関して ステートレス です。 - 現在のドキュメントでは、HTTP/3 とプロキシは相互にサポートされていません。両方を有効にしないでください。
- ヘッダーの優先順位(大文字と小文字を区別しません):リクエストごとのヘッダー > インスタンスの
headers> ブラウザーなりすましのデフォルト。空文字列の値を指定すると、なりすまし対象のヘッダーが削除されます。 - 汎用の
chrome/firefoxはバージョンを自動選択します。検出側が古いシグネチャーを追跡している場合は、バージョン指定のフィンガープリントを使用します。 - 1 つの
Impitインスタンスは、設定、プール、jar を共有する 1 つのユーザーエージェント ID に対応します。ID が異なる場合は、インスタンスを分けて作成します。 - レスポンス本文は一度だけ消費できます(Fetch 互換)。
text()/json()/arrayBuffer()/bytes()を 2 回呼び出さないでください。2 つの読み取り処理で必要な場合は、先にclone()を使用します。 - バインディングによってデフォルト値は異なります。Node の
timeoutはミリ秒単位で、リダイレクトはデフォルトで追従します(最大 10 回)。Python のtimeoutは秒単位で、follow_redirectsはデフォルトでFalseです(最大 20 回)。いずれも httpx 形式です。 - サイトの利用規約、robots.txt、レート制限、および適用法令を遵守します。正当なインテグレーション、ポリシーの範囲内でのスクレイピング、テストにはなりすましを使用し、不正アクセスや悪用には使用しないでください。
検証
リポジトリに既存のチェックがある場合は、そちらを優先します。Impit に関する重要な作業では、関連する項目を含めます。
- 既知のエンドポイントにスモークリクエストを送信し、ステータスと本文を一度だけ解析することを確認します。
http3: trueの場合、ネゴシエートされたプロトコルを確認します(Python ではresponse.http_versionを使用し、利用可能な場合はログ/ヘッダーも確認します)。- プロキシ経由の処理:HTTP/HTTPS/SOCKS を HTTP/3 なしで確認し、両方が設定されている場合は安全側に失敗させます。
- jar が設定されている場合、Cookie の往復を確認します(最初のレスポンスで設定され、2 回目のリクエストで送信されること)。
- プラットフォームへのインストール:対象の OS/アーキテクチャでネイティブのオプション依存関係が解決されることを確認します(Linux では glibc と musl を確認)。
ImpitOptions/RequestInit/エラークラスに対して、Node のコンシューマーを型チェックします。- Crawlee:
ImpitHttpClientと期待するフィンガープリントのオプションを使ってクローラーが動作することを確認します。
コメント
Markdown 対応