Scrapy 요청이 Splash에 도달하더라도 Splash 내부의 브라우저는 여전히 다른 아웃바운드 경로가 필요할 수 있습니다. 이는 두 개의 연결입니다.

Scrapy → Splash API
Splash browser → forward proxy → website

렌더당 프록시 하나를 쓰려면 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로 전달합니다. 두 리스너가 다르면 예시의 단일 포트를 바꾸십시오. 다른 리소스는 기본 경로를 받습니다. HTTP 프록시 목록은 공용 리소스 경로가 허용되고 후보에 프록시 자격 증명이 적용되지 않을 때 이러한 호스트 및 포트 필드의 엔드포인트 후보를 제공합니다.

request 메서드는 선택적 username과 password 필드를 받습니다. type이 HTTP이면 HTTPS 대상은 해당 HTTP 프록시를 통해 CONNECT를 사용합니다. 만들어 낸 HTTPS 프록시 유형은 필요하지 않습니다.

콜백은 각 요청 전에 실행됩니다. 그 request 메서드는 이미 전송된 요청을 바꿀 수 없고, 콜백은 splash:go나 splash:wait 같은 비동기 Splash 메서드를 호출할 수 없습니다.

페이지가 하나의 세션이나 소스 ID를 기대할 때 경로 선택을 안정적으로 유지하십시오. 모든 이미지와 API 요청을 무작위로 다른 출구에 할당하면 요청이 더 이상 하나의 일관된 세션에 속하지 않는 렌더링된 페이지가 만들어질 수 있습니다.

관련 글