すべての記事

リダイレクト制御とRaw Bufferモード

FourAのAPIで設定可能なリダイレクト制限とRawバイナリresponseがサポートされました。実際のスクレイピングのエッジケース処理を変える2つのオプションです。

リダイレクトチェーンはスクレイパーを破壊します。バイナリresponseはテキストとしてデコードされると破損します。これらは「ページを取得してHTMLをパースする」段階を過ぎると常に発生する2つの問題です。

この両方を処理する2つの新しいrequestオプション、followRedirectsreturnBufferをリリースしました。これらは現在APIで利用可能です。

仕組み

followRedirectsによるリダイレクト制御

多くのスクレイピングAPIはリダイレクトを真偽値(追跡するかしないか)として扱います。これは、ループするリダイレクトチェーンに遭遇するか、トラッキングパラメータを抽出するために中間の302 response自体が必要になるまでは機能します。

FourAのfollowRedirectsは0から20までの整数を受け入れます。省略する(または0を設定する)と、headerなどを含む生のリダイレクトresponseが返されます。5を設定すると、requestは最大5ホップまで追跡し、最終的な到達結果を返します。

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/short-link",
    "followRedirects": 3,
    "unblocker": true
  }'

これは最大3つのリダイレクトを追跡します。チェーンが2つで解決した場合は最終ページを取得します。3つより長い場合は、3番目のホップが返したものを取得します。

この違いは想像以上に重要です。Eコマースサイトは商品ページに到達する前にトラッキングURLを経由してリダイレクトします。これらは追跡する必要があります。しかし、アフィリエイトネットワークやURL短縮サービスは、6から8ホップの深さになるチェーンを作成することがあります。また、決して解決しないリダイレクトループもあります。特定の数で上限を設けることで、requestのタイムアウトを消費する無限ループに陥ることなくデータを収集できます。

これまで、回避策としてリダイレクトを無効にしてrequestを送信し、手動でLocation headerをパースして別のrequestを送信していました。これは最低2回のAPIコール、2倍のレイテンシ、そして保守が必要なコードを意味します。今は数値を含む1回のコールで済みます。

returnBufferによるRawバイナリresponse

画像、PDF、またはProtobufペイロードを収集する場合、テキストデコードはデータを破壊します。HTTPライブラリはresponseをテキストと想定し、文字セット検出を適用して、適合しないすべてのバイトを暗黙のうちに破損させます。Protobufは読み取れなくなります。画像のheaderは壊れます。結果として、原因を説明する明確なエラーメッセージもないまま、破損したファイルが残ります。

returnBufferはテキストデコードを完全にスキップするようにAPIに指示します。

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product-image.jpg",
    "returnBuffer": true
  }'

responseのボディは生バイトとして返されます(JSON responseではBase64エンコードされます)。クライアント側でデコードすれば、サーバーが送信したものと完全に一致します。文字セットの推測、エンコーディング変換、暗黙の破損はありません。

これは当社がよく目にしたサポートチケットの1つでした。ユーザーが商品画像やPDFカタログを収集し、開けないファイルを取得するというものです。修正方法は常に同じでしたが、今は回避策ではなく専用のフラグがあります。

影響

両方の機能により、ジョブあたりのAPIコール数が削減されます。followRedirectsは手動のリダイレクト追跡ループを排除します。returnBufferは「取得し、破損に気づき、異なる設定で再取得する」というサイクルを排除します。

リダイレクトが多いターゲット(アフィリエイトリンク、URL短縮サービス、Eコマースのトラッキングチェーン)の場合、ユーザーが手動のリダイレクト処理からfollowRedirectsに切り替えると、初期テストでrequest数が40から60パーセント減少しました。また、バイナリ収集タスク(商品画像、ドキュメントのダウンロード)では、returnBufferにより複数ステップの回避策が単一のオプションに変わります(初期結果)。

これらは派手な機能ではありません。サイトがチェックアウトフローに追加のリダイレクトホップを追加したことで、午前3時にスクレイパーが壊れるまで気にも留めないような機能です。

パワーユーザー向け

リダイレクトチェーンを正確に制御するには、followRedirectsとresponse検証を組み合わせます。リダイレクトを追跡しつつ、最終目的地が壁にぶつかった場合はrequestを失敗させます。

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product/12345",
    "followRedirects": 5,
    "unblocker": true,
    "validate": {
      "status": { "fail": [403, 503] },
      "data": { "fail": ["Access Denied", "captcha"] }
    }
  }'

これは最大5つのリダイレクトを追跡し、最終的なresponseを確認します。サイトがCAPTCHAページやアクセス拒否の壁にリダイレクトした場合、requestはきれいに失敗します。下流でフィルタリングすべきゴミデータはありません。

バイナリ収集では、大きなファイルをダウンロードする前にコンテンツタイプを確認する必要がある場合、returnBufferをHEAD requestと組み合わせます。FourAはHEADを正しく処理するため、ボディを取得せずにheaderを検査できます。Content-Typeを確認し、ダウンロードする価値があるか判断してから、returnBuffer: trueで完全なrequestを行います。

JavaScriptを多用するターゲットにブラウザタスクを使用している場合、これらのオプションは直接HTTPエンジンに適用されることに注意してください。ブラウザrequestはブラウザの組み込みナビゲーションを通じてリダイレクトを処理し、デフォルトでは上限なしで追跡します。

次のステップ

APIを通じてさらに多くのrequestレベルの制御を提供する準備を進めています。カスタムDNS解決、フェーズごとのタイムアウトチューニング、証明書処理オプションなどです。目標は、インフラストラクチャのオーバーヘッドなしに、クリーンなRESTインターフェイスを通じて完全なアンブロッカー機能を提供することです。

必要な特定のオプションがあればお知らせください。ダッシュボードにはすでにこれらの新しいオプションを使用したrequestのパフォーマンスが表示されているため、ご自身で違いを測定できます。