Splash のリソースごとにプロキシを選ぶ
個々のリソースに異なる経路が必要な場合は、レンダー単位または on_request コールバックで Splash プロキシを選択します。
Scrapy のリクエストが Splash に到達できても、Splash 内のブラウザーは別の外向き経路を必要とすることがあります。これは 2 つの接続です。
Scrapy → Splash API
Splash browser → forward proxy → websiteレンダーごとに 1 つのプロキシを使う場合は、HTTP API の proxy 引数を渡します。Splash 3.5 は http://proxy.example:8080 のようなプロキシ URL、または設定済みの proxy-profile 名を文書化しています。URL 形式は SOCKS5 と任意の認証情報にも対応しています。
ページ内の個々のリソースに異なるエンドポイントが必要な場合は、execute スクリプトを使い、ナビゲーションの前に選択を登録します。
function main(splash, args)
splash:on_request(function(request)
local host = args.default_proxy
if request.url == args.special_resource then
host = args.special_proxy
end
request:set_proxy{host = host, port = 8080, type = 'HTTP'}
end)
assert(splash:go(args.url))
return splash:html()
enddefault_proxy と special_proxy をホスト名として、special_resource を個別にルーティングするリソースの正確な URL として渡します。2 つのリスナーが異なる場合は、例の単一のポートを置き換えてください。他のリソースには既定の経路が適用されます。HTTP プロキシ一覧は、公開リソースへの経路が許可され、候補にプロキシ認証情報が適用されない場合に、これらのホストとポートのフィールド向けのエンドポイント候補を提供します。
request メソッドは任意の username と password フィールドを受け取ります。type が HTTP の場合、HTTPS の宛先はその HTTP プロキシ経由で CONNECT を使います。架空の HTTPS プロキシ種別は必要ありません。
コールバックは各リクエストの前に実行されます。その request メソッドは送信済みのリクエストを変更できず、コールバックは splash:go や splash:wait などの非同期 Splash メソッドを呼び出せません。
ページが 1 つのセッションや送信元 ID を前提とする場合は、経路の選択を安定させてください。画像や API リクエストを毎回ランダムに別の出口へ割り当てると、リクエストがもはや 1 つの一貫したセッションに属さないレンダー結果になることがあります。