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()
end

default_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 つの一貫したセッションに属さないレンダー結果になることがあります。

関連記事