Запрос Scrapy может успешно достигнуть Splash, хотя браузеру внутри Splash всё ещё нужен другой исходящий маршрут. Это два соединения:

Scrapy → Splash API
Splash browser → forward proxy → website

Для одного прокси на рендеринг передайте аргумент proxy HTTP API. Splash 3.5 документирует URL прокси, например http://proxy.example:8080, или имя настроенного профиля прокси. Формат 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 ресурса, который нужно маршрутизировать отдельно. Замените единственный порт из примера, если два слушателя различаются. Остальные ресурсы получают маршрут по умолчанию. Список HTTP-прокси предлагает кандидатов конечных точек для этих полей хоста и порта, когда маршруты к публичным ресурсам разрешены и к кандидатам не применяются учётные данные прокси.

Метод request принимает необязательные поля username и password. При типе HTTP цели HTTPS используют CONNECT через этот HTTP-прокси; им не нужен выдуманный тип HTTPS-прокси.

Обратный вызов выполняется перед каждым запросом. Его методы request не могут изменить запрос после отправки, а обратный вызов не может вызывать асинхронные методы Splash, такие как splash:go или splash:wait.

Сохраняйте стабильность выбора маршрута, когда страница ожидает одну сессию или одну идентичность источника. Случайное назначение каждого изображения и API-запроса другому выходу может дать отрендеренную страницу, запросы которой больше не относятся к одной согласованной сессии.

Похожие статьи