mcpField
I
impit

impit

github.com/dobroslavradosavljevic開発337 回インストール2 日前に更新
リポジトリ

impit について

実際のブラウザーを起動せず、ブラウザー風の TLS・HTTP フィンガープリントでリクエストを送る Apify Impit の開発向けスキルです。言語別 API、設定の選択、検証方法を開発者に案内します。

主な機能

  1. 01言語バインディングとバージョンの確認
  2. 02ブラウザーフィンガープリントとセッションの設定
  3. 03Node、Python、Rust の利用方法を案内
  4. 04リクエスト、Cookie、プロトコルの検証

活用シーン

  1. 01既存のプロジェクト形式に沿った Impit コードの調整
  2. 02フィンガープリントとセッション設定の選択
  3. 03プロキシ、HTTP/3、Cookie 動作の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dobroslavradosavljevic/skills --skill impit

インストール後、Claude Code で/impitを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
references/
fingerprints-ops.md
nodejs.md
python-rust.md
source-map.md

詳細

Impit

作業が Apify Impit に関係する場合に、このスキルを使用します。実際のブラウザーを起動せずに、TLS と HTTP のフィンガープリントを使ってブラウザーになりすました HTTP リクエストを送信します。

ワークフロー

  1. コードを変更する前に、ローカルの Impit の仕様を確認します。
    • 言語バインディング:Node の impit(npm)、Python の impit(PyPI/conda)、または git から取得する Rust クレート。
    • パッケージ/ネイティブバイナリのバージョンとプラットフォーム(Node ≥ 20、プラットフォーム固有のオプション依存関係)。
    • クライアントのライフサイクル:共有する Impit/AsyncClient/Impit::<Jar> と、単発のクライアントのどちらか。
    • フィンガープリントの選択:汎用の chrome/firefox と、バージョン指定のもの(chrome151 が最新)/okhttp/ios18。
    • セッションの要件:Cookie、プロキシ、HTTP/3、リダイレクト、デフォルトヘッダー、タイムアウト。
  2. 最新のフィンガープリント、オプション名、またはバインディング間の違いをユーザーが求めた場合は、ドキュメントを更新します。source-map.md から確認を始めます。
  3. Node/TypeScript のインストール、ImpitOptions、fetch、レスポンス、エラーについては、nodejs.md を参照します。
  4. Python と Rust の API、パッチ適用済み依存関係、ビルダーパターンについては、python-rust.md を参照します。
  5. フィンガープリント、HTTP/3 とプロキシの制約、Cookie、ヘッダーの優先順位、マルチパートの境界、Crawlee の ImpitHttpClient については、fingerprints-ops.md を参照します。
  6. 既存プロジェクトのスタイルに合わせて実装します。
    • Node の作業では、コマンド例に bun/bunx を優先して使用します。
    • なりすます ID ごとに、クライアントインスタンスを 1 つ再利用します(プールと必要に応じた Cookie jar を使用)。
    • Impit をヘッドレスブラウザーとして扱わないでください。ページの JS、DOM、または自動化 API は使用できません。

判断基準

  • 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 と期待するフィンガープリントのオプションを使ってクローラーが動作することを確認します。

コメント