Route
Page.route() または BrowserContext.route() でネットワークルートが設定されるたびに、Route オブジェクトを使用してルートを処理できます。
ネットワーキングの詳細については、こちらをご覧ください。
メソッド
abort
v1.9より前に追加ルートのリクエストを中止します。
使用法
Route.abort();
Route.abort(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'- 一般的な障害が発生しました。
戻り値
fallback
追加日: v1.23オプションのオーバーライドを使用して、ルートのリクエストを続行します。このメソッドは Route.resume() と似ていますが、リクエストを送信する前に他のマッチングハンドラーが呼び出される点が異なります。
使用法
与えられたパターンに複数のルートが一致する場合、それらは登録とは逆の順序で実行されます。これにより、最後に登録されたルートが常に以前のすべてのルートを上書きできます。以下の例では、リクエストはまず一番下のハンドラーによって処理され、次に前のハンドラーにフォールバックし、最終的には最初に登録されたルートによって中止されます。
page.route("**/*", route -> {
// Runs last.
route.abort();
});
page.route("**/*", route -> {
// Runs second.
route.fallback();
});
page.route("**/*", route -> {
// Runs first.
route.fallback();
});
複数のルートを登録することは、API呼び出しとページリソース、または以下の例のようにGETリクエストとPOSTリクエストなど、異なる種類のリクエストを異なるハンドラーで処理したい場合に役立ちます。
// Handle GET requests.
page.route("**/*", route -> {
if (!route.request().method().equals("GET")) {
route.fallback();
return;
}
// Handling GET only.
// ...
});
// Handle POST requests.
page.route("**/*", route -> {
if (!route.request().method().equals("POST")) {
route.fallback();
return;
}
// Handling POST only.
// ...
});
後続のハンドラーにフォールバックしながらリクエストを変更することもできます。これにより、中間ルートハンドラーはリクエストのURL、メソッド、ヘッダー、およびpostDataを変更できます。
page.route("**/*", route -> {
// Override headers
Map<String, String> headers = new HashMap<>(route.request().headers());
headers.put("foo", "foo-value"); // set "foo" header
headers.remove("bar"); // remove "bar" header
route.fallback(new Route.ResumeOptions().setHeaders(headers));
});
リクエストをすぐにネットワークに送信するには Route.resume() を使用します。この場合、他のマッチングハンドラーは呼び出されません。
引数
optionsRoute.FallbackOptions(オプション)-
setHeadersMap<String, String> (オプション)#設定されている場合、リクエストHTTPヘッダーを変更します。ヘッダー値は文字列に変換されます。
-
設定されている場合、リクエストメソッド(例:GETまたはPOST)を変更します。
-
setPostDataString | byte[] (オプション)#設定されている場合、リクエストのPOSTデータを変更します。
-
設定されている場合、リクエストURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。URLを変更してもルートのマッチングには影響しません。すべてのルートは元のリクエストURLを使用してマッチされます。
-
戻り値
fetch
追加: v1.29リクエストを実行し、応答を変更して満たすことができるように、応答を満たさずに結果を取得します。
使用法
page.route("https://dog.ceo/api/breeds/list/all", route -> {
APIResponse response = route.fetch();
JsonObject json = new Gson().fromJson(response.text(), JsonObject.class);
JsonObject message = itemObj.get("json").getAsJsonObject();
message.set("big_red_dog", new JsonArray());
route.fulfill(new Route.FulfillOptions()
.setResponse(response)
.setBody(json.toString()));
});
引数
optionsRoute.FetchOptions(オプション)-
setHeadersMap<String, String> (オプション)#設定されている場合、リクエストHTTPヘッダーを変更します。ヘッダー値は文字列に変換されます。
-
setMaxRedirectsint (オプション)追加バージョン: v1.31#自動的にフォローされるリクエストのリダイレクトの最大数。この数を超えるとエラーがスローされます。デフォルトは
20です。リダイレクトをフォローしない場合は0を渡します。 -
setMaxRetriesint (オプション)追加バージョン: v1.46#ネットワークエラーが再試行される最大回数。現在、
ECONNRESETエラーのみが再試行されます。HTTP応答コードに基づく再試行は行われません。制限を超えるとエラーがスローされます。デフォルトは0(再試行なし) です。 -
設定されている場合、リクエストメソッド(例:GETまたはPOST)を変更します。
-
setPostDataString | byte[] (オプション)#設定されている場合、リクエストのPOSTデータを変更します。
-
setTimeoutdouble (オプション)追加バージョン: v1.33#リクエストのタイムアウト(ミリ秒単位)。デフォルトは
30000(30秒)です。タイムアウトを無効にするには0を渡します。 -
設定されている場合、リクエストURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。
-
戻り値
詳細
setHeaders オプションは、フェッチされたリクエストと、それによって開始されたリダイレクトにも適用されることに注意してください。setHeaders を元のリクエストのみに適用し、リダイレクトには適用しない場合は、代わりに Route.resume() を参照してください。
fulfill
v1.9より前に追加指定された応答でルートのリクエストを満たします。
使用法
すべてのリクエストを404応答で満たす例
page.route("**/*", route -> {
route.fulfill(new Route.FulfillOptions()
.setStatus(404)
.setContentType("text/plain")
.setBody("Not Found!"));
});
静的ファイルを提供する例
page.route("**/xhr_endpoint", route -> route.fulfill(
new Route.FulfillOptions().setPath(Paths.get("mock_data.json"))));
引数
optionsRoute.FulfillOptions(オプション)-
オプションのレスポンスボディ (テキスト形式)。
-
setBodyBytesbyte[] (オプション)追加バージョン: v1.9#オプションのレスポンスボディ (生バイト形式)。
-
setContentTypeString (オプション)#設定されている場合、
Content-Type応答ヘッダーの設定と同じです。 -
setHeadersMap<String, String> (オプション)#応答ヘッダー。ヘッダー値は文字列に変換されます。
-
応答するファイルのパス。コンテンツタイプはファイル拡張子から推測されます。
pathが相対パスの場合、現在の作業ディレクトリを基準に解決されます。 -
setResponseAPIResponse (オプション)追加されたバージョン: v1.15#ルートのリクエストを完了するための APIResponse。応答の個々のフィールド (ヘッダーなど) は、完了オプションを使用してオーバーライドできます。
-
応答ステータスコード。デフォルトは
200です。
-
戻り値
request
v1.9より前に追加ルーティングされるリクエスト。
使用法
Route.request();
戻り値
resume
v1.9より前に追加オプションの上書きを用いて、ルートのリクエストをネットワークに送信します。
使用法
page.route("**/*", route -> {
// Override headers
Map<String, String> headers = new HashMap<>(route.request().headers());
headers.put("foo", "foo-value"); // set "foo" header
headers.remove("bar"); // remove "bar" header
route.resume(new Route.ResumeOptions().setHeaders(headers));
});
引数
optionsRoute.ResumeOptions(オプション)
戻り値
詳細
setHeaders オプションは、ルーティングされたリクエストと、それが開始するすべてのリダイレクトの両方に適用されます。ただし、setUrl、setMethod、および setPostData は元のリクエストにのみ適用され、リダイレクトされたリクエストには引き継がれません。
Route.resume() はリクエストをすぐにネットワークに送信し、他のマッチングハンドラーは呼び出されません。チェーン内の次のマッチングハンドラーを呼び出したい場合は、Route.fallback() を使用してください。
Cookie ヘッダーはこのメソッドを使用してオーバーライドすることはできません。値が指定された場合、それは無視され、CookieはブラウザのCookieストアから読み込まれます。カスタムCookieを設定するには、BrowserContext.addCookies()を使用してください。