リダイレクトチェーンはスクレイパーを破壊します。バイナリresponseはテキストとしてデコードされると破損します。これらは「ページを取得してHTMLをパースする」段階を過ぎると常に発生する2つの問題です。
この両方を処理する2つの新しいrequestオプション、followRedirectsとreturnBufferをリリースしました。これらは現在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のパフォーマンスが表示されているため、ご自身で違いを測定できます。