← すべての記事

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

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

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

これら両方に対応するため、2つの新しいリクエストオプションである followRedirects と returnBuffer をリリースしました。すでにAPIで利用可能です。

動作の仕組み

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

大半のスクレイピングAPIは、リダイレクトをブール値(追跡するか否か)として処理します。これは、ループするリダイレクトチェーンに遭遇したり、トラッキングパラメータを抽出するために中間にある 302 レスポンス自体が必要になったりするまでは機能します。

FourA の followRedirects は 0 から 20 の整数を受け取ります。省略するか 0 に設定すると、ヘッダーを含めた元のリダイレクトレスポンスをそのまま返します。5 に設定すると、リクエストは最大 5 ホップまで追跡した上で、最終的に到達した内容を返します。

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "X-API-Key: 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回、7回、8回と深いホップのチェーンを生成することがあります。また、一部のリダイレクトループは解決しません。上限を特定回数に制限することで、リクエストのタイムアウトを浪費する無限ループに陥ることなくデータを収集できます。

これまでは、リダイレクトを無効にしてリクエストを送信し、Locationヘッダーを手動でパースして、再度リクエストを送信するという回避策を取っていました。これには最低2回のAPI呼び出しと2倍のレイテンシが発生し、保守すべきコードも増えていました。現在は、数値を1つ指定する1回の呼び出しで完了します。

returnBufferによるRawバイナリレスポンス

画像、PDF、またはprotobufペイロードを収集する場合、テキストデコードによってデータが破壊されます。HTTPライブラリがレスポンスをテキストと見なして文字セット検出を適用し、適合しないバイトを警告なく破損させます。Protobufは読み取り不能になり、画像ヘッダーは壊れます。その結果、原因を示す明確なエラーメッセージもないまま、破損したファイルが残ることになります。

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

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

response bodyはraw bytes(JSON responseではbase64エンコード)として返されます。クライアント側でデコードすれば、サーバーが送信したデータをそのまま取得できます。文字セットの推測やエンコーディング変換によるサイレントなデータ破損は発生しません。

これは、サポートで特によく見られた問い合わせの1つでした。商品画像やPDFカタログを収集した際、ファイルが開けないという問題です。修正方法は常に同一でしたが、回避策を使う代わりに専用フラグで対応できるようになりました。

Impact

どちらの機能も、ジョブあたりのAPI呼び出し回数を削減します。followRedirectsは手動のリダイレクト追跡ループを排除します。returnBufferは「取得、破損を確認、設定を変更して再取得」というサイクルを解消します。

リダイレクトが多いターゲット(アフィリエイトリンク、URL短縮サービス、Eコマースのトラッキングチェーン)では、手動のリダイレクト処理からfollowRedirectsへの移行により、初期テストでrequest数が40〜60%減少することを確認しています。また、バイナリ収集タスク(商品画像、ドキュメントのダウンロード)では、returnBufferにより複数ステップの回避策を単一のオプションに集約できます(初期検証結果)。

これらは派手な機能ではありません。しかし、サイトがチェックアウトフローにリダイレクトホップを追加したことで、午前3時にスクレイパーが停止したときに初めて重要性に気づく種類の実用的な機能です。

For Power Users

followRedirectsをresponse検証と組み合わせることで、リダイレクトチェーンを正確に制御できます。リダイレクトを追跡しつつ、最終到達先でエラーが発生した場合はrequestを失敗させます:

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "X-API-Key: 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を検証します。サイトが検証ページやアクセス拒否ページにリダイレクトした場合、requestは適切に失敗します。ダウンストリームで不要なデータをフィルタリングする必要はありません。

バイナリの収集では、大容量ファイルをダウンロードする前にContent-Typeを確認する必要がある場合、returnBufferをHEAD requestと組み合わせて使用します。FourAはHEADを適切に処理するため、bodyを取得せずにheaderを検査できます。Content-Typeを確認し、ダウンロードする価値があるかを判断した上で、returnBuffer: trueを使用して完全なrequestを実行します。

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

今後の予定

現在、カスタムDNS名前解決、フェーズごとのtimeout調整、証明書処理オプションなど、より多くのrequestレベルの制御をAPI経由で公開する作業を進めています。目標は、インフラのオーバーヘッドなしに、クリーンなRESTインターフェースを通じて完全なブラウザプロファイルの制御を提供することです。

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