**未公開。**Glac のブラウザはまだ利用できません。このページは、構築中の仕組みを公開前に説明したもので、公開までに変わることがあります。
呼び出し一覧
| 呼び出し | 内容 |
|---|---|
POST /v1/browsers |
稼働中のセッションを作成(201)。または、指定した名前のプロジェクトのセッションを、スリープしたところから復帰させて返す(200) |
GET /v1/browsers |
プロジェクトのセッション。新しい順に、cursor の後から limit 件(デフォルト 100、最大 1,000)ずつ。status、kind、name で絞り込み |
GET /v1/browsers/{id} |
ID または名前で指定したセッション |
PATCH /v1/browsers/{id} |
時間、メタデータ、プロキシを変更 |
POST /v1/browsers/{id}/sleep |
すぐにスリープさせる |
POST /v1/browsers/{id}/rotate-url |
新しいアドレスを発行。古いアドレスは使えなくなる |
DELETE /v1/browsers/{id} |
ブラウザ、ページ、マシンごと終了(204)。保存するプロファイルを指定して作成したセッションは、?save_profile=false でない限り、先にプロファイルを保存 |
GET /v1/browsers/{id}/live, POST /v1/browsers/{id}/profile |
ページをライブで見るためのアドレス。プロファイルを今すぐ保存(ライブビューとプロファイル) |
GET /v1/browsers/profiles, GET, DELETE /v1/browsers/profiles/{name} |
プロジェクトのプロファイル |
セッションの作成、変更、スリープ、終了には write スコープを持つキーが、読み取りには read スコープが必要です。アドレスは認証情報なので、url スコープのないキーで読むと、cdp_url と live_url は null になります。
セッションの作成
どのフィールドも省略できます。
| フィールド | 説明 |
|---|---|
kind |
chromium-headless(デフォルト):Chromium のヘッドレスシェル。chromium:フル機能の Chromium(1280×800 の画面付き)。lightpanda:Lightpanda。レイアウトエンジンがない(スクリーンショットと PDF はページのテキストのみ)。これと profile の併用は拒否される(400 kind_unsupported)。ほかの種類は拒否される(400 unknown_kind) |
name |
英小文字、数字、ハイフンで 1〜63 文字(サンドボックスと同じ)。プロジェクト内で、一度に 1 つのサンドボックスだけが使える。プロジェクトのセッションの名前で作成すると、そのセッションが返される(下記) |
region |
na、eu、ap のいずれか。作成する場所。省略するとコントロールプレーンのリージョン |
sleep_after_seconds |
最後の接続が閉じて(最後のリクエストが終わって)から、スリープするまでの時間:1〜3,600。指定しなければ 10 |
connection_idle_seconds |
ブラウザへの接続で、どちらの方向にも何も流れない状態が続いたとき、閉じるまでの時間:60〜86,400。指定しなければ 600 |
delete_after_idle_seconds |
削除されるまでにスリープしていられる時間:60 秒〜1 年。省略すると、スリープを理由に削除されることはない |
metadata |
任意のキーと値(文字列)。キー product はプラットフォームが使うため指定できない(400 reserved_metadata) |
profile |
{name, save, version}:セッションを返す前に読み込むプロファイル(最新のバージョン、または version)。save が true なら、セッションの削除時に保存し直す |
proxy |
自前のプロキシ({"url": "http://user:password@host:port"})。有料プランのみ。Web トラフィックがここを経由して送信される(自前のプロキシ)。無料プランでは 403 proxy_not_on_plan |
POST /v1/browsers
{"name": "agent-42", "region": "eu", "sleep_after_seconds": 30}レスポンスはセッション(201)で、Location: /v1/browsers/<id> が付きます。作成には Idempotency-Key を指定でき、同じキーで再送した作成には、最初と同じレスポンスが返ります。
作成は、プランでアカウントが同時に稼働させられる上限によって拒否されることがあります(403 plan_cap_reached、param は instances、vcpus、memory_bytes のいずれか)。また、今すぐ収容できるマシンがない場合も拒否されます(503 no_capacity、retryable)。その種類のイメージが与えられていないコントロールプレーンでは、その種類のセッションは作成できません(503 not_served_here、param は kind)。ブラウザを起動できなかったセッション(イメージを取得できなかった、ブラウザが立ち上がらなかった)はセッションになりません。作成は拒否され(503 session_failed、retryable)、マシンが返した内容とそのコードが message に入り、何も残りません。
セッションが持つもの
| フィールド | 説明 |
|---|---|
id |
サンドボックスの ID(sbx-…)。/v1/sandboxes/{id}/… の呼び出しもすべて使える |
name, kind, region |
作成時のとおり。region はセッションを持つマシンのリージョン |
status |
実行中は awake、スリープ中(またはスリープ状態で保持中)は asleep、マシンに到達できない間は unavailable、停止して戻らなかった場合は failed。失敗したセッションは、イベント browser.failed で通知される |
error |
失敗した理由({code, message})。マシンが返したとおり。status が failed でなければ null |
cdp_url |
CDP クライアントの接続先。ブラウザのポートの署名付きアドレス https://9222-<id>-<signature>.<preview domain>。認証情報はホスト名に含まれる |
live_url |
ページ(chromium セッションでは画面)をライブで見て操作する場所。ライブビューを参照 |
profile |
作成時に指定した、または最後に保存したプロファイル:{name, save, version}。なければ null |
connections |
現在開いている接続(セッションを稼働させ続ける)。クライアントと閲覧者の接続 |
sleep_after_seconds, connection_idle_seconds, delete_after_idle_seconds |
時間の設定(上記のとおり) |
metadata, created_at |
ご自身で設定した値。作成日時 |
proxy |
自前のプロキシ({url, username}):アドレス(http://host:port)と、認証に使うユーザー名。パスワードは含まない。なければ null |
usage.awake_seconds |
稼働していた時間。請求と同じ数え方で、ミリ秒単位 |
usage.proxy_bytes |
作成以降にプロキシを通過したデータ量(双方向の合計、バイト単位)。方向ごとの値は usage.proxy_sent_bytes と usage.proxy_received_bytes |
同じ名前なら同じセッション
プロジェクトにあるセッションの名前で作成すると、そのセッションが、スリープしたところから復帰し、ページもそのままの状態で返されます(200)。エージェントが毎ターン agent-42 を求めれば、同じブラウザが返ってきます。この復帰も、ほかの復帰と同じく、プランでアカウントが同時に稼働させられる上限の対象です。同じ名前で同時に 2 回作成しても作られるセッションは 1 つで、両方にそのセッションが返されます。
プロジェクトの通常のサンドボックスが使っている名前は拒否されます(409 name_taken)。サンドボックスがセッションになることはありません。別の種類のセッションの名前も拒否され、プロファイルのアドレスである profiles も拒否されます(400 invalid_name)。
稼働とスリープ
セッションは、ブラウザ(chromium セッションでは画面)にクライアントが接続している間、ページが何をしていても稼働中です。ページのタイマーやネットワーク通信だけでは稼働し続けません。最後の接続が閉じて(最後のリクエストが終わって)から sleep_after_seconds 秒後に、メモリとディスクを保持したままスリープし、復帰したときにはタブもページもそのまま残っています。connection_idle_seconds の間どちらの方向にも何も流れない接続は閉じられるため、接続を閉じずにいなくなったクライアントがセッションを稼働させ続けることはありません。
POST /v1/browsers/{id}/sleepは、セッションをすぐにスリープさせます。開いている接続は開いたままで、次のメッセージでセッションが復帰します。- アドレスへの接続で復帰します。
PATCH /v1/browsers/{id}は、sleep_after_seconds、connection_idle_seconds、delete_after_idle_seconds、metadata(全体を置き換え)、proxyを変更します。時間をnullにするとデフォルトに戻り、delete_after_idle_seconds: nullならセッションは削除されずに残り、proxy: nullでプロキシを外します。
新しいアドレス
POST /v1/browsers/{id}/rotate-url は、セッションのアドレスに新しいシークレットを与えます。それまでに発行したアドレスはすべてそれ以降拒否され(401 invalid_link)、それらのアドレスで入った接続は、CDP クライアントのものも含め、呼び出しが応答する前に切断されます。レスポンスは新しい cdp_url を持つセッションです。見られてはいけない人にアドレスを見られたときに実行してください。
自前のプロキシ
有料プランでは、セッションの Web トラフィックを自前の HTTP プロキシ経由で送信できます。作成時に proxy を指定するか、後から変更します。
POST /v1/browsers
{"name": "agent-42", "proxy": {"url": "http://user:password@proxy.example.com:3128"}}- 経由するもの:セッションのポート 80 と 443 への TCP 接続で、ブラウザがページを読み込むのに使う接続です。ブラウザを動かすマシン上でブラウザの隣にあるリレーが、各接続の行き先(TLS ハンドシェイクのサーバー名、HTTP リクエストの
Host)を読み取り、そこへのトンネルを自前のプロキシに要求します(CONNECT name:port、認証情報はProxy-Authorization: Basicヘッダー)。サイトから見えるのはプロキシのアドレスで、名前はプロキシで解決されます。トンネルの中では何も読み取られず、変更もされません。TLS はブラウザとサイトの間で続きます。 - QUIC は拒否:HTTP プロキシでは運べないポート 443 への UDP はセッションから出られないため、ブラウザはプロキシを通じて TCP 上の HTTP で通信します。ほかのポートへの接続は、プロキシがない場合と同じように送信されます。
- ブラウザには知らされない:ブラウザの設定にプロキシは現れず、そのために再起動されるものもなく、セッションの中に認証情報を持つものもありません(ファイルにも、環境変数にも、プロセスにもありません)。認証情報はセッションが動くマシンが保持し、API のどのレスポンスにも含まれません。
proxyに表示されるのはアドレスとユーザー名です。 - プロキシは、ポート 80 と 443 への
CONNECTを受け付ける HTTP プロキシで、インターネット上のホスト名かアドレスにあるものです(Squid は、ポート 80 も許可しない限り、ポート 443 へのCONNECTしか通しません)。http://のみで、ユーザー名とパスワードに URL で使えない文字(@、:、/)が含まれる場合は%XXで表記します。TLS 経由で接続するプロキシ(https://)、SOCKS、サンドボックスから到達できないアドレス(プライベートアドレス範囲、リンクローカル、ループバック)は拒否されます(400invalid_proxy、paramはproxy.url)。メッセージに URL が繰り返されることはありません。 - 変更:
PATCH /v1/browsers/{id}で別のproxyを指定する(なしにするならnull)と、次の接続から反映されます。ブラウザとページはそのまま動き続け、それまでのプロキシ経由の接続は切断され、ブラウザは現在の設定どおりの経路で新しい接続を開きます。 - プロキシがトンネルを受け付けない場合(到達できない、または
CONNECTに 2xx 以外を返す。受け付けない認証情報には 407):HTTP で読み込むページには 502proxy_failedが返り、そのメッセージにはプロキシのアドレスと応答が示されますが、認証情報は含まれません。HTTPS で読み込むページは TLS ハンドシェイクに失敗します。セッションのマシンは、認証情報を除いてこれをログに記録します。 - 料金:プロキシを通過したデータは双方向で数えられ(
usage.proxy_bytes)、ほかと同じくセッションのトラフィックです。プロキシへ出ていくデータは送信トラフィックで、サンドボックスと同じ料金です。 - リクエストのルールとは併用不可:ネットワークルールがリクエストを読み取る(
inject、http)セッションには、プロキシを設定できません(400invalid_proxy)。アドレス、ポート、名前によるルールは、プロキシを経由するものにも、ほかと同じく適用されます。 - プロキシはセッションのためのものです。通常のサンドボックスには設定できません(400
unknown_field)。
ネットワーク
セッションはサンドボックスと同じようにインターネットに接続しますが、ポート 25、465、587(メール)や、マイニングプールが待ち受けるポート(3333、4444、5555、7777、14444、45700)には決して届きません。マシンがほかの何よりも先に拒否します。セッションのネットワークルールは PATCH /v1/sandboxes/{id} の egress で変更し、ルールの内容にかかわらず、これらのポートは閉じたままです。