_abck クッキーとは結論から: _abck は Akamai Bot Manager の主要クッキーです。一度取れば済む札ではなく、エッジが書き換え続ける台帳です。応答のたびに新しい値が返ることがあり、その値はブラウザが送ったセンサーデータに対する判定を符号化しています。_abck を捕まえて動かさずに持っていると、その瞬間から劣化が始まります。
典型的な値は F1A2B3...~-1~YAAQ... のように、チルダで区切られた 3 部分です。
| 位置 | 何が入るか | 実務での意味 |
|---|---|---|
| 1 番目 | bmak / センサースクリプトが集めたデータの長いハッシュ | スクリプトが走ったこと、そして何を報告したかの証明。書き換えるとクッキー全体が無効になります。 |
| 2 番目 | 判定フラグ | 0 はまだ不明、1 はボットと見なされた、~0 や -1 は受理。ヘッダをどれだけ整えても、1 は通してくれません。 |
| 3 番目 | 発行記録(符号化されたタイムスタンプと参照データ) | エッジが判定の古さを測るための材料。古い値は再評価されます。 |
Akamai は関門で一度だけ判定するのではなく、セッションを継続的に評価します。応答ごとに判定が更新されうるので、5 分前に書き出したクッキーは、すでにエッジが怪しいと見なしているセッションを記述しているかもしれません。たとえば要求の頻度が跳ねた、IP が変わった、主張している User-Agent と TLS フィンガープリントが食い違う、といった理由です。
これは Akamai のスクレイピングで最も多い失敗そのものです。開発者は _abck をログイントークンのように扱い、キャッシュし、ワーカーや IP をまたいで使い回します。実際には、ブラウザセッションの心拍に近いものです。
対処の前にベンダーを確定してください。Akamai の直し方は Imperva や Cloudflare の直し方ではありません。
Server: AkamaiGHost、X-Akamai-Transformed、X-Akamai-Request-ID。/akam/ を含むセンサースクリプトのパス、bmak への参照。_abck、bm_sz、bm_sv、ak_bmsc のいずれか。Access Denied と、Reference #18.xxxxxxxx 形式の参照番号。その参照番号は Akamai 側の問い合わせ用ハンドルで、こちらから引けるコードではありません。分かるのは、エッジのどの判定で落ちたか、という層の違いだけです。
bm_sz ― セッション/テレメトリ用。_abck と対で動きます。必ず一緒に移動させてください。bm_sv ― 短命。機微なエンドポイントのまわりで現れます。ak_bmsc ― 旧来のボットマネージャ用。今も一部のプロパティに残っています。_abck だけを移して bm_sz を置いていく、あるいはその逆は、リプレイ攻撃に見える確実な作り方です。
実ブラウザでセンサーを走らせ、ジャーごと保持する最小形です。クッキーを 1 個抜き出して持ち回さないことが要点です。
ctx = browser.new_context(proxy=PROXY) # 出口と指紋を固定 page = ctx.new_page() page.goto(url) # ここでセンサーが走る # _abck と bm_sz が揃う。以降の HTTP 呼び出しも同じ出口から。 jar = await ctx.cookies() # 403 が出たら、ジャーを捨てて同じコンテキストでナビゲートし直す。 # 古い _abck を貼り直すのは、たいてい逆効果になる。
現実的な選択肢は 2 つ、そして存在しないものが 1 つです。
_abck を返す解決 API が通常の代替で、SolveHub は Akamai のタスクをこの方式で処理し、完了タスク単位で課金します。_abck は復号できますか。 3 番目の区切りのタイムスタンプは読めますが、1 番目はセンサー入力のハッシュです。復号しても有効な値を偽造できるわけではありません。
新しい _abck なのに 403 が返るのはなぜですか。 2 番目のフラグが 1 になっていることがよくあります。エッジはすでにそのセッションをボットと判定していて、クッキーはアクセスを与えるのではなく、その判定を報告しているだけです。
リクエストごとに新しい値が必要ですか。 いいえ。セッションごとに 1 つで、サイトが適用するスケジュールで更新します。リクエストごとに回すこと自体がシグナルになります。
_abck と bm_sz はどちらも必要ですか。 多くのサイトで両方です。bm_sz を欠いた _abck は、セッションの整合が取れていないように見えます。
値が ~-1~ のまま動きません。 センサーが完走していない可能性があります。スクリプトの読み込みが途中で切れていないか、実行を待たずにナビゲートしていないかを確認してください。