スティッキーとローテーション: セッション制御の仕組み

8分

スティッキーとローテーション: リクエストごととタイマーのローテーションの動き、スティッキーが新しいIPに勝つとき、CookieとIP変更の関係、セッションIDの自分での試験。

ローテーションするIPは、リクエストをプールへ広げます。スティッキーセッションは、一定のあいだ一つのアドレスを保とうとします。この案内は、スクレイピング、口座作業、QA向けにプロキシを買い、セッションのモードを選ぶ人向けです。Top Proxyは比較カタログです。IPは売りません。無料の鍵も渡しません。仕組みを説明し、自分で確認できる供給元を示します。

セッション制御は、IPの出自とは別です。レジデンシャルプールは回せますし、保てます。モバイルプールも同じです。データセンターのプランは、借りているあいだ固定アドレスとして売られることが多いですが、正確な条件は製品によります。買い手はこれらの語を混ぜ、決済の途中で流れが死ぬ理由を後から探します。

01ローテーション、スティッキー、固定: 三つの別の動き

これらの語は同義語のように使われます。指しているものは違います。

モードゲートウェイがすること変更を決めるのは向く場面
リクエストごとのローテーション接続またはリクエストごとにプールから出口を選ぶ。同じアドレスが戻ることもあるゲートウェイ独立したページ取得、広いURL一覧
タイマーのローテーション間隔が終わるとプールから新しい出口を選ぶ。同じ出口が再び選ばれることもある供給元の設定、または自分のパラメータ途中の変更に耐えられる短い流れ
スティッキーセッション同じセッションIDを送っているあいだ、同じ出口を保とうとする自分(セッションID経由)ログイン、カート、複数段のフォーム、Cookieに縛られたページ送り
固定借りている期間、セッションをまたいで同じアドレスを保とうとする製品の条件長く使う口座、許可リスト
専用アドレス(固定かどうかにかかわらず)を自分だけに予約する製品の条件共有利用そのものが問題になる場合

大切な列は三つ目です。リクエストごとのローテーションでは、自分は何もせず、ゲートウェイが再び選びます。たいてい別のIPになりますが、いつもではありません。スティッキーセッションでは、毎回合図を送り、供給元はそれを守ろうとします。固定はアドレスの連続を指します。専用は独占を指します。どちらも障害や再割当ての保証ではありません。それは製品と契約に残ります。

セッションIDなしのローテーション、一つのセッションID付きのスティッキー、一覧ページは回してログインと詳細は保つ混ぜたクロール、の三つのプロキシセッション型を比べる模式図

セッションIDがある場合とない場合に、ゲートウェイがリクエストをどう扱うかの模式例です。編集用の図であり、実測のネットワークデータではありません。実際の寿命とフェイルオーバーは供給元に依存します。

02ローテーションの仕組み: リクエストごとか、タイマーか

ローテーションのゲートウェイは、大きいプールの前にある一つのホスト名とポートです。新しいセッションが始まるたび、ゲートウェイはそのプールから出口を選びます。セッションキーが無いと、多くのレジデンシャルゲートウェイは接続のたびに新規と扱うので、連続するリクエストは別のアドレスから出ることがあります。ただし、いま使ったばかりのアドレスが戻ることもあります。既定は供給元ごとに違うので、推測せず製品ページを読んでください。

リクエストごとのローテーションは、取得がそれぞれ独立している仕事に向きます。商品ページ、公開文書、検索結果、価格のスナップショットです。次のリクエストが同じ家庭から来る必要はありません。スクレイピング向けのプロキシローテーションとして、多くの人が指しているのはこれです。

タイマーのローテーションはその中間です。出口は決まった分数のあいだ保たれ、そのあとゲートウェイが再び選びます。ポート範囲で出す供給元も、ユーザー名のパラメータで出す供給元もあります。相手が新しいアドレスを見る頻度は下がります。切り替わる瞬間は自分では制御できないので、境界をまたぐ流れはまだ切れます。

ローテーションは、騒がしいクライアントを隠しません。クローラがバーストを撃てば、相手はバーストを見ます。広がるのはアドレスの数だけです。レート制限、妥当な同時実行、礼儀ある再試行は、自分のコードの仕事です。

03スティッキーセッションと固定IP

スティッキーセッションは、一定の窓のあいだ、またはセッションIDを変えるまで、一つの出口に留めます。供給元はたいていプロキシのユーザー名へこれを入れます。文書化された二つの例は、細部がどれだけ違うかを示します。

  • Oxylabsのレジデンシャルプロキシは、ユーザー名に sessid を取り、任意で分単位の sesstime を付けます。セッション制御の文書では、既定のセッションは10分、またはリクエスト無しの60秒で終わり、sesstime は最大1440分まで延ばせるとあります。IPがオフラインになると、通常のセッションは別のIPへ移って続きます。別の sessid_oneip モードは回さず、代わりにHTTP 502を返します。
  • Bright Dataはユーザー名に -session-<id> を足します。プロキシ設定オプションでは、一意のセッションIDごとに一意のIPが付き、-const フラグは同じピアを保ち、そのピアが落ちると「no peer available」の502を返すとあります。そのページはセッションの寿命を書いていません。

スティッキーセッションは最善努力です。ピアはオフラインになり、モバイルキャリアはアドレスを再割り当てし、供給元は出口を替えるか、大きく失敗するかを決めます。保持時間は目標として扱い、リースとして読まないでください。ログインや口座が安全である約束でもありません。

スティッキーは、固定とも専用とも違います。同じレンジをほかの顧客が共有することがあり、セッションのあとアドレスはプールへ戻ることがあります。アドレスの連続が要るなら、固定またはISP製品を見てください。独占が要るなら、専用を探してください。どちらでも条件を確認してください。障害と再割当ては製品ごとに扱われます。そのトレードオフはISPとレジデンシャルにあります。

多くのサイトは、IPだけでなくCookieで訪問者を追います。流れの途中でIPが変わるのが危ないのはそのためです。Cookieは「同じ利用者」と言い、網は「別の場所」と言います。それを許すサイトもあります。盗まれたセッションとして扱い、再ログインを強制し、カートを消すサイトもあります。

Cookie側を握るのはHTTPクライアントです。Pythonでは、requests.Session オブジェクトがリクエストをまたいでCookieを保ち、接続を再利用します。Requestsの高度な使い方にそうあります。プロキシのセッションIDが握るのはIP側です。両者は独立です。IPが回ってもCookieを保てます。空のCookieジャーで始めても、IPは保てます。組み合わせは意図して選んでください。

  • 新しいCookieジャー + 回るIP: リクエスト間のCookieとIPの結びを外します。状態の無いクロールに向きます。設定であり、透明化ではありません。ブラウザやクライアントの指紋、ヘッダー、口座の識別子は、まだリクエストを相関できます。
  • 一つのCookieジャー + スティッキーIP: じっとしている一人の訪問者に見えます。ログイン、カート、複数ページのフォームに向きます。
  • 一つのCookieジャー + 回るIP: 危ない混ぜ方です。CookieをIPに縛るサイトは、チャレンジするかログアウトさせます。
  • 新しいCookieジャー + スティッキーIP: ログイン前に、サイトがそのアドレスをどう扱うかを試すのに向きます。

ローテーションには、Cookie以外のコストもあります。そのアドレスがサイトに積んだ評判を失います。相手によっては、ページごとに新しいチャレンジになります。

口座作業はたいていスティッキーか固定を欲し、出自はレジデンシャルかモバイルが多いです。回るデータセンターIPは、多くのログイン壁が自動化としてすでに想定している組み合わせです。

05スクレイピング向けのプロキシローテーション: 仕事ごとにモードを選ぶ

実際のクローラの多くは、両方のモードを使います。状態の要らない一覧ページは回します。詳細ページ、ログイン、Cookieの向こうはスティッキーへ切り替えます。その分割はクローラの設定であり、供給元の機能ではありません。供給元が両方を出せば足ります。購入判断の残りはスクレイピング向けプロキシにあります。

仕事勧めるモード理由
公開の商品または検索ページリクエストごとのローテーション保つ状態がなく、負荷が出口へ広がる
地域ごとの価格監視国フィルタ付きのローテーション場所は要る。連続は要らない
ログインのあと数ページスティッキー。流れより少し長く保つCookieとIPが揃う
決済または複数段のフォームスティッキー。実行ごとに新しいセッションID途中の変更はフォームをリセットできる
長く走るブラウザプロファイル固定、または長いスティッキー何時間もの連続が要る
相手APIの許可リスト固定(独占が要るなら専用)許可リストは安定したアドレスを要す

実務の規則はこうです。流れが何分かかるかを測り、スティッキーの窓を少し長くし、流れが終わったら新しいセッションIDを作る。必要以上にセッションを保つと、すでに印の付いたアドレスに留まります。

計算例(仮定の数値)。 ログインと詳細ページ6件がログで約4分、そのうち1段がレポート待ちで約90秒だとします。Oxylabsの文書の既定(10分、またはリクエスト無し60秒)に対しては、合計は収まります。ただし90秒の隙間はアイドル上限を超えるので、流れの途中でセッションが終わることがあります。直し方は、より長い sesstime を設定して、その供給元がアイドル隙間をどう扱うかを確認するか、待ちのあいだリクエストを流し続けることです。ほかの供給元は別の上限を使うので、その文書の値でこの計算をやり直してください。

迷ったら対照を走らせてください。同じURL集合、同じIP出自、二つのセッションモードです。始める前に、実行ごとに何を記録するかを決めてください。

記録するもの → なぜ要るか

  1. 01リクエストごとのセッションIDと時刻IP変更をアイドル隙間や期限に結びつけられる
  2. 02出口IPと国ローテーション、スティッキー、プールのずれが見える
  3. 03プロトコル(HTTPまたはSOCKS5)プロトコルをIP出自から分けておける
  4. 04HTTPステータスとチャレンジページプロキシの誤りとサイトの防御を分けられる
  5. 05各段のあとのCookieまたはログイン状態IP変更を流れが生き延びたかを示せる

仕事を完了するモードを残してください。

国フィルタは、回しているあいだも効きます。米国のローテーションプールは米国のままである必要があります。混在プールはずれることがあるので、数件で国を抜き取り確認してください。

06一連のリクエストでスティッキーセッションを試す

製品ページだけを信じないでください。同じセッションIDを何度か送り、次に無しで送り、毎回出口IPを記録します。下のスケッチはPython Requestsです。プロキシのホスト、ユーザー名の形式、IPエコーURLはプレースホルダです。セッション構文は供給元ごとに違うので、供給元の文書の値に置き換えてください。

import time
from urllib.parse import quote
import requests

PROXY_HOST = "gw.example-provider.com:7777"   # placeholder
USER = "USERNAME"                              # placeholder
PASSWORD = "PASSWORD"                          # placeholder, load from your secret store
IP_ECHO_URL = "https://ip-echo.example/plain"  # placeholder endpoint that returns your IP

def proxies_for(session_id=None):
    # Session syntax is provider-specific; this mirrors a "-session-<id>" style username.
    user = f"{USER}-session-{session_id}" if session_id else USER
    # Percent-encode credentials so characters like @ or : do not break the URL.
    url = f"http://{quote(user, safe='')}:{quote(PASSWORD, safe='')}@{PROXY_HOST}"
    return {"http": url, "https": url}

def exit_ip(session_id=None):
    # Pass proxies per request: session-level proxies can be overridden by env proxy variables.
    r = requests.get(IP_ECHO_URL, proxies=proxies_for(session_id), timeout=(5, 20))
    r.raise_for_status()
    return r.text.strip()

for i in range(5):                 # bounded series, no retry loop
    print("sticky", i, exit_ip("test001"))
    time.sleep(10)

for i in range(5):
    print("no session", i, exit_ip())

TLS検証はオンのままです。Requestsの既定です。リクエストごとの proxies 引数が大切です。Requestsの文書は、session.proxies に置いた値が環境のプロキシ設定で上書きされ得ると警告しています。

結果は慎重に読んでください。

  • スティッキー系列で同じIP、セッションIDなしで別のIP、というのが多くのレジデンシャルゲートウェイの狙いです。
  • 案内された窓より前にスティッキー系列が変わるのは、供給元へ上げる価値のある合図です。ただし一回の実行は証明ではありません。ピアは落ちます。黙って出口を替える供給元もあります。
  • 新しいセッションIDは、別のアドレスを保証しません。プールは以前見たIPを戻せます。
  • アイドルの一時停止が一回セッションを終わらせても、正確なタイムアウトは分かりません。結論の前に、別の間隔で繰り返してください。
  • セッションなし系列で出口IPが変わらないことだけでは、経路失敗の証明になりません。接続ごとに出口を保つゲートウェイもあります。

本番で使うのと同じプロトコルで試してください。HTTPとSOCKS5の端点は動きが違うことがあります。差はSOCKS5とHTTPにあります。手早い確認なら、プロキシ経由で自分のIPを開いてください。その1リクエストのアドレスを示すので、更新して比べます。プロキシチェッカーはこちら側から端点を試し、プロキシが応答するかの確認に使えます。結果はチェッカーの接続元を反映し、自分のブラウザやクライアントの問題は切り分けません。

07セッション制御を確認するカタログ候補

下のサービスは、カタログのレジデンシャルまたは混在プールの供給元です。セッション制御は一部で文書化され、細部は違います。各カードについて、いま出しているセッションモード、構文、最大保持時間、フェイルオーバー時の動きを、供給元の現行文書で確認してください。ここに載っていることは、あなたの構成を試した意味ではありません。

SOAX — レジデンシャルとモバイルプロキシ
SOAX — レジデンシャルとモバイルプロキシ3.8218

SOAXは共有クレジットプール上のローテーションするレジデンシャルとモバイルを売り、データセンターとISPも同じプランに入ります。Builderは月$200 + VAT(200クレジット)から。Builderのティア1トラフィックは1GBあたり$3です。

85か国
$3.00
1GBあたり
Decodo(Smartproxy) — レジデンシャルとデータセンタープロキシ
Decodo(Smartproxy) — レジデンシャルとデータセンタープロキシ4.22118

Decodo(旧Smartproxy)はレジデンシャルとデータセンタープロキシを売っています。レジデンシャルは月次プランなしで1GBあたり$4、または3 GBから1GBあたり$3.75の月次パックです。支払いはカード、PayPal、Alipay、Google/Apple Pay、暗号資産(制限あり)です。

83か国
$0.38
1GBあたり
Froxy — レジデンシャル、モバイル、データセンター
Froxy — レジデンシャル、モバイル、データセンター4.3119

Froxyはレジデンシャル、モバイル、高速レジデンシャル、データセンターのプロキシをトラフィック課金で扱います。月次パッケージと、有料試用$1.99 / 3日 / 100 MBがあります。

236か国
$0.96
1GBあたり
サイトを見る
Oxylabs — レジデンシャルとデータセンタープロキシ
Oxylabs — レジデンシャルとデータセンタープロキシ4.0771

Oxylabsはレジデンシャル、モバイル、ISP、データセンタープロキシを、月$30からのひとつの月次契約で売っています。支払いはカード、電信送金、AliPay、PayPalです。

10か国
$0.45
1GBあたり
Bright Data — レジデンシャルとデータセンタープロキシ
Bright Data — レジデンシャルとデータセンタープロキシ4.41442

Bright Dataはデータ収集向けの大規模プロキシ網です。レジデンシャル、モバイル、ISP、データセンターのIPが約195か国にあります。レジデンシャルトラフィックは定期契約なしの従量払いができ、データセンターとISPアドレスは10 IPからのパックです。レジデンシャルとモバイルの利用には本人確認が必要です。

10か国
$5.00
1GBあたり

各リクエストが独立できるなら、ローテーションを選んでください。次のリクエストが同じ訪問者に見える必要があるなら、スティッキーを選んでください。アドレスの連続または独占を借りているなら、固定または専用を選んでください。出自が先、セッションのモードが次、供給元が三番です。

スティッキーとローテーションのプロキシはどう違いますか?

ローテーションのプロキシは、接続、リクエスト、または時間窓ごとにプールから出口IPを選びます。アドレスはたいてい変わりますが、繰り返すこともあります。スティッキーのプロキシは、同じセッションIDを送っているあいだ同じ出口IPを保とうとし、セッション期限かピアのオフラインまで続きます。

スティッキープロキシのセッションは何分続きますか?

供給元によります。Oxylabsは10分の既定を最大1440分まで延ばせると文書化しています。ほかの供給元は別の上限です。保持時間は最善努力として扱い、供給元の文書を確認してください。

新しいセッションIDは、いつも新しいIPになりますか?

なりません。新しいセッションIDはゲートウェイに新しいセッションの開始を求めますが、プールは以前使ったアドレスをまだ返せます。

スクレイピングにはローテーションプロキシを使うべきですか?

一覧や検索結果のような独立したページでは、ローテーションが負荷を多くの出口へ広げます。ログインやCookieの向こうは、その部分のクロールをスティッキーセッションへ切り替えてください。

スティッキーセッションは固定IPと同じですか?

違います。スティッキーセッションは、共有プールからしばらくIPを借ります。固定IPは借りている期間、セッションをまたいで同じである想定です。専用IPは自分だけに予約されます。障害と再割当ては、なお製品の条件に依存します。

スティッキーセッションのIPが早く変わったのはなぜですか?

レジデンシャルまたはモバイルのピアがオフラインになった可能性があり、一部の供給元はセッションを自動で別のIPへ移します。案内された窓を守っていないと結論する前に、試験を繰り返してください。