Route
Page.RouteAsync() または BrowserContext.RouteAsync() でネットワークルートが設定されるたびに、Route
オブジェクトはルートを処理できます。
ネットワークについて詳しくはこちら。
メソッド
AbortAsync
v1.9より前に追加ルートのリクエストを中止します。
使用法
await Route.AbortAsync(errorCode);
引数
-
オプションのエラーコード。デフォルトは
failed
で、以下のいずれかになります。'aborted'
- 操作が中止されました (ユーザーのアクションによる)'accessdenied'
- ネットワーク以外のリソースへのアクセスが拒否されました'addressunreachable'
- IPアドレスに到達できません。通常、指定されたホストまたはネットワークへのルートがないことを意味します。'blockedbyclient'
- クライアントがリクエストをブロックすることを選択しました。'blockedbyresponse'
- レスポンスが要件を満たさずに提供されたため、リクエストが失敗しました(例:'X-Frame-Options' および 'Content-Security-Policy' の祖先チェック)。'connectionaborted'
- 送信されたデータのACKを受信しなかった結果、接続がタイムアウトしました。'connectionclosed'
- 接続が閉じられました (TCP FINに相当)。'connectionfailed'
- 接続試行に失敗しました。'connectionrefused'
- 接続試行が拒否されました。'connectionreset'
- 接続がリセットされました (TCP RSTに相当)。'internetdisconnected'
- インターネット接続が失われました。'namenotresolved'
- ホスト名を解決できませんでした。'timedout'
- 操作がタイムアウトしました。'failed'
- 一般的なエラーが発生しました。
戻り値
ContinueAsync
v1.9より前に追加オプションのオーバーライドを使用して、ルートのリクエストをネットワークに送信します。
使用法
await page.RouteAsync("**/*", async route =>
{
var headers = new Dictionary<string, string>(route.Request.Headers) { { "foo", "bar" } };
headers.Remove("origin");
await route.ContinueAsync(new() { Headers = headers });
});
引数
options
RouteContinueOptions?
(オプション)-
Headers
IDictionary?<string, string> (オプション)#設定されている場合、リクエストのHTTPヘッダーを変更します。ヘッダーの値は文字列に変換されます。
-
設定されている場合、リクエストメソッド (例: GET または POST) を変更します。
-
設定されている場合、リクエストのポストデータを変更します。
-
設定されている場合、リクエストのURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。
-
戻り値
詳細
Headers オプションは、ルーティングされたリクエストと、それが開始するリダイレクトの両方に適用されます。ただし、Url、Method、および PostData は、元のリクエストにのみ適用され、リダイレクトされたリクエストには引き継がれません。
Route.ContinueAsync() はリクエストを即座にネットワークに送信し、他のマッチングするハンドラーは呼び出されません。チェーン内の次のマッチングするハンドラーを呼び出したい場合は、Route.FallbackAsync() を使用してください。
このメソッドを使用して Cookie
ヘッダーを上書きすることはできません。値が指定された場合、それは無視され、クッキーはブラウザのクッキーストアからロードされます。カスタムクッキーを設定するには、BrowserContext.AddCookiesAsync() を使用してください。
FallbackAsync
追加バージョン: v1.23オプションのオーバーライドを使用して、ルートのリクエストを続行します。このメソッドは Route.ContinueAsync() に似ていますが、リクエストを送信する前に他のマッチするハンドラが呼び出される点が異なります。
使用法
与えられたパターンに複数のルートが一致する場合、それらは登録とは逆の順序で実行されます。これにより、最後に登録されたルートが常にそれ以前のすべてのルートを上書きできます。以下の例では、リクエストはまず一番下のハンドラによって処理され、次に以前のハンドラにフォールバックし、最終的に最初に登録されたルートによって中止されます。
await page.RouteAsync("**/*", route => {
// Runs last.
await route.AbortAsync();
});
await page.RouteAsync("**/*", route => {
// Runs second.
await route.FallbackAsync();
});
await page.RouteAsync("**/*", route => {
// Runs first.
await route.FallbackAsync();
});
複数のルートを登録することは、API呼び出しとページリソース、または以下の例のようにGETリクエストとPOSTリクエストなど、異なる種類のリクエストを個別のハンドラで処理したい場合に便利です。
// Handle GET requests.
await page.RouteAsync("**/*", route => {
if (route.Request.Method != "GET") {
await route.FallbackAsync();
return;
}
// Handling GET only.
// ...
});
// Handle POST requests.
await page.RouteAsync("**/*", route => {
if (route.Request.Method != "POST") {
await route.FallbackAsync();
return;
}
// Handling POST only.
// ...
});
後続のハンドラにフォールバックしながらリクエストを変更することもできます。これにより、中間ルートハンドラはリクエストのURL、メソッド、ヘッダ、およびポストデータを変更できます。
await page.RouteAsync("**/*", async route =>
{
var headers = new Dictionary<string, string>(route.Request.Headers) { { "foo", "foo-value" } };
headers.Remove("bar");
await route.FallbackAsync(new() { Headers = headers });
});
リクエストを直ちにネットワークに送信したい場合、その場合は他のマッチするハンドラは呼び出されないため、Route.ContinueAsync() を使用してください。
引数
options
RouteFallbackOptions?
(オプション)-
Headers
IDictionary?<string, string> (オプション)#設定されている場合、リクエストのHTTPヘッダーを変更します。ヘッダーの値は文字列に変換されます。
-
設定されている場合、リクエストメソッド (例: GET または POST) を変更します。
-
設定されている場合、リクエストのポストデータを変更します。
-
設定されている場合、リクエストのURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。URLを変更してもルートのマッチングには影響しません。すべてのルートは元のリクエストURLを使用してマッチングされます。
-
戻り値
FetchAsync
追加バージョン: v1.29リクエストを実行し、結果をフルフィルすることなくフェッチします。これにより、レスポンスを変更してからフルフィルすることができます。
使用法
await page.RouteAsync("https://dog.ceo/api/breeds/list/all", async route =>
{
var response = await route.FetchAsync();
dynamic json = await response.JsonAsync();
json.message.big_red_dog = new string[] {};
await route.FulfillAsync(new() { Response = response, Json = json });
});
引数
options
RouteFetchOptions?
(オプション)-
Headers
IDictionary?<string, string> (オプション)#設定されている場合、リクエストのHTTPヘッダーを変更します。ヘッダーの値は文字列に変換されます。
-
MaxRedirects
int? (オプション)追加バージョン: v1.31#自動的にフォローされるリダイレクトの最大数。この数を超えるとエラーがスローされます。デフォルトは
20
です。リダイレクトをフォローしない場合は0
を渡します。 -
MaxRetries
int? (オプション)追加バージョン: v1.46#ネットワークエラーを再試行する最大回数。現在、
ECONNRESET
エラーのみが再試行されます。HTTPレスポンスコードに基づく再試行は行われません。制限を超えるとエラーがスローされます。デフォルトは0
(再試行なし) です。 -
設定されている場合、リクエストメソッド (例: GET または POST) を変更します。
-
設定されている場合、リクエストのポストデータを変更します。
-
Timeout
[float]? (オプション)追加バージョン: v1.33#リクエストのタイムアウト時間 (ミリ秒)。デフォルトは
30000
(30秒) です。タイムアウトを無効にするには0
を渡します。 -
設定されている場合、リクエストのURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。
-
戻り値
詳細
なお、Headers オプションは、フェッチされたリクエストと、それによって開始されたリダイレクトの両方に適用されます。Headers を元のリクエストにのみ適用し、リダイレクトには適用しない場合は、代わりに Route.ContinueAsync() を参照してください。
FulfillAsync
v1.9より前に追加与えられたレスポンスでルートのリクエストをフルフィルします。
使用法
すべてのリクエストを404レスポンスでフルフィルする例
await page.RouteAsync("**/*", route => route.FulfillAsync(new ()
{
Status = 404,
ContentType = "text/plain",
Body = "Not Found!"
}));
静的ファイルを提供する例
await page.RouteAsync("**/xhr_endpoint", route => route.FulfillAsync(new() { Path = "mock_data.json" }));
引数
options
RouteFulfillOptions?
(オプション)-
オプションのレスポンスボディ (テキスト形式)。
-
BodyBytes
byte[]? (オプション)追加バージョン: v1.9#オプションのレスポンスボディ (生バイト形式)。
-
設定されている場合、
Content-Type
レスポンスヘッダーの設定と等価です。 -
Headers
IDictionary?<string, string> (オプション)#レスポンスヘッダー。ヘッダーの値は文字列に変換されます。
-
Json
[object]? (オプション)追加バージョン: v1.29#JSON レスポンス。設定されていない場合、このメソッドはコンテンツタイプを
application/json
に設定します。 -
応答に使用するファイルパス。コンテンツタイプはファイル拡張子から推測されます。
path
が相対パスの場合、現在の作業ディレクトリを基準に解決されます。 -
Response
APIResponse? (オプション)追加バージョン: v1.15#ルートのリクエストをフルフィルするためのAPIResponse。レスポンスの個々のフィールド (ヘッダーなど) は、フルフィルオプションを使用してオーバーライドできます。
-
レスポンスステータスコード、デフォルトは
200
。
-
戻り値
Request
v1.9より前に追加使用法
Route.Request
戻り値