cf_clearance クッキーとは結論から: cf_clearance は Cloudflare が「あなたはボットではない」と判断したあとにブラウザへ付けるクッキーです。解くトークンではなく、Cloudflare のエッジが発行する領収書です。通したチャレンジが刻まれ、IP アドレスと User-Agent に紐づき、限られた時間だけ有効です(既定 30 分)。その後の失敗は、ほぼこの 3 つのどれかが崩れた結果です。
このクッキーは、3 種類のチャレンジのいずれかが完了したあとにだけ現れます。
cf_clearance は同じリクエストの流れの中で Cloudflare のエッジが別に付けます。この区別が効きます。Turnstile のトークンを買ってヘッダに貼り、「なぜまだチャレンジページなのか」と悩む例は定番です。トークンが答えるのは「人間がウィジェットを解いた」で、クッキーが答えるのは「この接続がチャレンジを完了した」です。
値は 40〜60 文字程度の不透明な文字列に、ドット区切りの接尾辞が付いた形で、署名されています。Cloudflare は形式を公開していませんが、実務上の含意は内部構造に依存しません。チャレンジを実行せずにクライアント側で作ることはできず、マシンを移すと死にます。
| 紐づけ先 | 変わったときに起きること |
|---|---|
| IP アドレス | clearance は即座に落ち、またチャレンジになります。プロキシを回すとブロックが悪化するのはこのためです。 |
| User-Agent / TLS フィンガープリント | 同じ結果です。ブラウザが発行したクッキーを requests から再生すると、フィンガープリントだけで死ぬのが普通です。 |
| ゾーン | あるサイトのクッキーは別のサイトでは絶対に通りません。同じ Cloudflare アカウントの下でも同じです。 |
| 時間 | 既定の寿命は 30 分。セッション限定のクッキーはブラウザを閉じると消えます。古いクッキーは無いより悪いことがあります。リプレイのシグナルになるからです。 |
__cf_bm ― ボット管理のテレメトリ用で、clearance ではありません。日常的に付き、何も証明しません。cf_chl_2 / cf_chl_prog ― 実行中のチャレンジの一時状態。これが見えているなら、まだ通っていません。cf_clearance ― 「エッジを越えた」を意味する唯一のものです。実ブラウザで 1 回通し、そのジャーとネットワーク同一性を保つ最小形です。3 つを 1 組として扱うのが要点です。
ctx = browser.new_context(proxy=PROXY) # 出口は固定 page = ctx.new_page() page.goto(url) # ここでチャレンジが走る jar = await ctx.cookies() # cf_clearance が入る # 以降の直接 HTTP 呼び出しも、同じ出口・同じ UA で行う。 # 期限が来たら、クッキー単体ではなく 3 点セットごと作り直す。
requests のヘッダ一式で再生する ― TLS フィンガープリントで死にます。直すのは解決器の性能ではなくアーキテクチャです。1 セッションを 1 つの出口 IP、1 つのフィンガープリント、1 つのクッキーに固定し、期限が来たら 3 点セットごと更新します。
cf_clearance を返す API が通常の経路です。SolveHub は Cloudflare のインタースティシャルと Turnstile のタスクに 1 つの REST エンドポイント を用意し、完了タスク単位で課金します。どのサービスでも、返ってきたクッキーが実際のリクエストを出すのと同じプロキシ出口と対になっているかを確認してください。別のサブドメインでも cf_clearance は通りますか。 通りません。clearance はホスト名とゾーン単位です。
ブラウザなしで生成できますか。 計算ではできません。チャレンジを完了するしかなく、そのためには JS エンジンか、それを代わりに走らせるサービスが必要です。
有効に見えるクッキーなのに 403 が返るのはなぜですか。 発行時と使用時で IP か User-Agent が動いているのが普通です。解決器を疑う前に、両側でその 2 つをログに取ってください。
cf_clearance の寿命は変えられますか。 サイト側の設定であり、クライアントからは変えられません。既定は 30 分ですが、サイトごとに違い、セッション限定のこともあります。
__cf_bm があれば通りますか。 いいえ。__cf_bm は日常的に付くテレメトリ用で、エッジを越えた証明にはなりません。