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' の ancestor チェック)とともに配信されたため、リクエストが失敗しました。'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
オプションは、ルーティングされたリクエストとそれが開始するリダイレクトの両方に適用されます。ただし、Url
、Method
、および PostData
は、元のリクエストにのみ適用され、リダイレクトされたリクエストには引き継がれません。
Route.ContinueAsync() は、リクエストをすぐにネットワークに送信し、他の一致するハンドラーは呼び出されません。チェーン内の次の一致するハンドラーを呼び出す場合は、Route.FallbackAsync() を使用してください。
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、method、headers、および postData を変更できます。
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 で追加#オプションのレスポンスボディ(raw バイト形式)。
-
設定すると、Content-Type レスポンスヘッダーの設定と同じになります。
-
Headers
IDictionary?<string, string> (オプション)#レスポンスヘッダー。ヘッダー値は文字列に変換されます。
-
Json
[object]? (オプション)v1.29 で追加#JSON レスポンス。このメソッドは、コンテンツタイプが設定されていない場合、application/json に設定します。
-
応答するファイルパス。コンテンツタイプはファイル拡張子から推測されます。path が相対パスの場合、現在の作業ディレクトリからの相対パスとして解決されます。
-
Response
APIResponse? (オプション)v1.15 で追加#ルートのリクエストを履行するための APIResponse。レスポンスの個々のフィールド(ヘッダーなど)は、fulfill オプションを使用してオーバーライドできます。
-
レスポンスステータスコード。デフォルトは
200
です。
-
戻り値
Request
v1.9 より前に追加ルーティングされるリクエスト。
使用方法
Route.Request
戻り値