プロキシセッションごとに Ruby Mechanize エージェントを保持する
Ruby Mechanize エージェントのプロキシを一度設定し、関連するリクエストで再利用し、Cookie の状態と持続接続を意図的に範囲分けします。
HTTP レスポンスを確認し、通常のリンクをたどるだけなら、常にフルブラウザが必要とは限りません。Ruby Mechanize は、そのリクエストを行うエージェントにプロキシを公開します。
agent = Mechanize.new('office-route')
begin
agent.set_proxy('proxy.example', 8080)
page = agent.get('https://www.example.com/')
puts page.code
ensure
agent.shutdown
endこれは mechanize ライブラリが読み込まれていることを前提とします。プロキシ認証なしで許可された公開ページを確認する場合、HTTP プロキシ一覧が例に適したホスト/ポート値を提供します。proxy メソッドは、エンドポイントが要求する場合、ユーザー名とパスワードを省略可能な第 3・第 4 引数として受け取ります。
同じブラウジングセッションに属するリクエストには、設定済みのエージェントを再利用します。Cookie と履歴、そしてネットワーク設定も保持します。出口プロキシを変更しても、それ自体で新しい ID が生まれたり、ログイン Cookie が破棄されたりはしません。
複数のプロキシセッションでは、作業中に 1 つの共有エージェントを切り替えるのではなく、それぞれに専用のエージェントを与えます。ライブラリは、分離した SSL 接続が必要な場合の一意な接続名も文書化しています。例のコンストラクタ名がその選択を明示します。
関連する URL チェックをプロキシごとにまとめると、不要な再設定を減らせます。結果は、それを生成したルートと URL に関連付けて保持し、リダイレクトやエラー応答も含めます。
Mechanize はブラウザの JavaScript 実行を再現しません。テスト対象の挙動がスクリプト、レンダリング、ブラウザ固有の認証に依存する場合は、実際のブラウザを使用してください。プロキシ経由の HTTP 取得の成功は、このエージェントがそのリクエストを行えたという狭い問いに答えるものです。