Web.Contents を使用した状態コードの処理
Web.Contents 関数には、特定の HTTP 状態コードを処理するための組み込み機能がいくつか用意されています。 既定の動作は、オプション レコードの ManualStatusHandling フィールドを使用して、拡張機能でオーバーライドできます。
自動再試行
Web.Contents によって、次のいずれかの状態コードで失敗した要求が自動的に再試行されます。
| コード | Status |
|---|---|
| 408 | 要求タイムアウト |
| 429 | 要求が多すぎます |
| 503 | サービス利用不可 |
| 504 | ゲートウェイ タイムアウト |
| 509 | 帯域幅制限超過 |
要求は、失敗するまで最大 3 回再試行されます。 応答に Retry-after ヘッダーが含まれない限り、エンジンによってエクスポネンシャル バックオフ アルゴリズムが使用され、次の再試行までの待機時間が決定されます。 ヘッダーが見つかると、エンジンは次の再試行までの指定された秒数だけ待機します。 サポートされる最小待機時間は 0.5 秒で、最大値は 120 秒です。
注意
Retry-after 値は delta-seconds 形式である必要があります。 HTTP-date 形式は現在、サポートされていません。
認証の例外
次の状態コードは、資格情報の例外が発生し、ユーザーに資格情報の入力 (または、有効期限が切れた OAuth トークンの場合は再ログイン) を求める認証プロンプトが表示されます。
| コード | Status |
|---|---|
| 401 | 権限がありません |
| 403 | Forbidden |
注意
拡張機能は、状態コード 401 および 403 で ManualStatusHandling オプションを使用できます。これは、拡張コンテキストの外部で行われた Web.Contents 呼び出し (つまり、Power Query から直接) で行うことができるものではありません。
リダイレクト
次の状態コードを実行すると、Location ヘッダーに指定されている URI に自動的にリダイレクトされます。 Location ヘッダーが欠落していると、エラーが発生します。
| コード | Status |
|---|---|
| 300 | 複数の選択肢 |
| 301 | Moved Permanently |
| 302 | Found |
| 303 | その他を参照 |
| 307 | Temporary Redirect |
注意
状態コード 307 のみが POST 要求メソッドを保持します。 その他のすべてのリダイレクト状態コードは、GET に切り替わります。