jsoup는 HTTP 프록시를 통해 페이지를 가져오고 같은 호출에서 응답을 파싱할 수 있습니다:

Document page = Jsoup.connect("https://www.example.com/")
    .proxy("proxy.example", 8080)
    .get();

호스트 이름과 정수 포트가 프록시를 식별합니다. 허용된 공개 페이지 요청에는 사용 중인 서비스나 HTTP 프록시 목록에서 HTTP 엔드포인트를 선택하세요. connect에 전달하는 URL은 원하는 페이지 그대로입니다. 이 경로를 추가하기 위해 별도의 URLConnection으로 HTML을 문자열로 내려받을 필요는 없습니다.

proxy(String, int)는 해당 요청에 사용할 HTTP 프록시를 선택합니다. 1080 같은 포트 번호가 프로토콜을 SOCKS로 바꾸지는 않습니다. 프록시 엔드포인트는 설정하는 유형을 지원해야 합니다. jsoup는 java.net.Proxy를 받는 오버로드도 제공하지만, 특정 경로에 대한 지원은 여전히 사용 중인 HTTP 구현에 달려 있습니다.

각 워커에게 고유한 요청을 주기

요청 수준 옵션은 다운로드마다 JVM 시스템 속성을 바꾸는 것보다 병렬 작업을 쉽게 만듭니다. 변경 가능한 요청은 워커마다 따로 보관하세요. 최신 jsoup는 새 요청을 만들면서 세션의 설정과 쿠키 저장소를 공유할 수 있습니다:

Connection session = Jsoup.newSession();
Document first = session.newRequest()
    .url("https://www.example.com/one")
    .proxy("proxy-a.example", 8080)
    .get();
Document second = session.newRequest()
    .url("https://www.example.com/two")
    .proxy("proxy-b.example", 8080)
    .get();

위 호출은 명확성을 위해 순차적으로 실행됩니다. 작업을 동시에 분배한다면 실행 중인 하나의 Connection에서 프록시를 바꾸지 말고 요청을 독립적으로 만드세요. 공유 세션은 쿠키도 공유합니다. 탐색 신원을 분리해야 할 때는 서로 다른 세션을 사용하세요.

이 인터페이스는 jsoup 1.21.2에 있습니다. 인수가 없는 newRequest() 인터페이스는 1.14.1부터 있었으므로 오래된 애플리케이션은 세션 예제를 도입하기 전에 의존성을 확인해야 합니다.

자격 증명은 인증된 프록시에 필요한 추가 조건입니다. 경로 선택이 성공해도 계정이 제공되지는 않으며, 프록시 챌린지를 받는 것은 해당 포트에 연결하지 못하는 것과 다릅니다.

관련 글