2010-03-08 16 views
2

SOCKS 프록시를 통해 HtmlUnit을 사용할 수 있습니까? 누구든지 코드 샘플을 제공해 주시겠습니까? 이 경우SOCKS를 HtmlUnit과 함께 사용하려면 어떻게해야합니까?

  1. 서브 클래스 MultiThreadedHttpConnectionManager 그래서 SOCKS 정보를 설정 할 수 있고 :

    ====

    그래서

    내가 WebClient를 소스를 통해 발굴 한, 여기에 내가 생각할 수있는 가장 좋은 방법 그래서 1 단계에서 관리자를 사용하는 createHttpClient를 다시 작성하고 직접 또는 http example.com의 clien 해당 관리자를 얻을 수있는 방법을 추가 - 세트는 연결을 반환하기 전에, SOCKS는

  2. 서브 클래스 WebConnection이 매개 변수 설정

  3. 그것이 WebClient 4) 액세스 연결의 관리자가 사용하는 설정) WebConnection 3 서브 클래스 만들기 WebClient 예 2)을 작성) 1을 사용하기 - 처음에 t (... 그렇게 나쁘지는 지금을 보호하다)

+0

어떻게 webclient의 다른 인스턴스에 대해 서로 다른 양말 프록시를 갖는이 문제를 궁극적으로 해결 했습니까? –

+0

@XCoder, 나는 htmlunit 2 이후로하지 않았습니다.8이 나왔다. 그 버전 이후로 구성 할 수있다. – Fluffy

+0

yup! 나도 그것을 발견했다, 신속한 대답에 감사드립니다. –

답변

0

HtmlUnit과는 기본 연결 라이브러리로 HttpClient를 사용 양말을 사용하는 그것의 방법을 사용하여, 나는이 조금을 조사하지만, :

1- Couldn't find a way to configure HttpClient (except by the generic Java Socks mechanism defined in http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.html) 
2- Do not have access to a public Socks Proxy to test against 
+0

새로운 httpclient로 인해 2.8에서 작동합니다. 당신은 개발자 중 하나야, 그렇지? 당신의 일에 감사드립니다. – Fluffy

+0

예, 저는 팀 중 하나입니다. 2.8은 요청 수준에서도 SOCKS를 지원합니다. –

2

당신이해야 할 모든 WebClient 개체를 만들기 전에 appropriate system properties으로 설정하십시오. (내부적으로 HtmlUnit과에 의해 사용되는)이 시점, HttpClient를에서

System.setProperty("socksProxyHost", "localhost"); // replace "localhost" with your proxy server 
System.setProperty("socksProxyPort", "9999"); // replace "9999" with your proxy port number 

WebClient client = new WebClient(); 

설정을 선택하고 모든 네트워크 통신을 위해 SOCKS 프록시를 사용합니다 예를 들면 다음과 같습니다.

업데이트 : 수정 된 질문 (및 사용자 의견)을 읽었으며 올바른 방향으로 가고 있다고 생각합니다. 문제는 위의 시스템 속성을 사용하여 1 단계를 구현하면 코드가 스레드로부터 안전하지 않습니다 (해당 시스템 속성이 전역이므로). 한 가지 해결책은 무언가를 동기화하는 것이지만, 물론 이것은 성능 문제를 일으킬 수 있습니다 (문제는 아닐 수도 있음). 당신이 정말로는 소켓 당 기준에서이를 제어 할 경우

, 그럼 난 당신이 뭔가를 할 필요가 생각 다음

  1. 은에 java.net.Proxy 객체를 전달하는 사용자 정의 ProtocolSocketFactory 만들기 Socket 생성자 (예 : this example).
  2. ProtocolSocketFactory을 사용하는 사용자 지정 Protocol을 만듭니다.
  3. ProtocolHttpConnection.setProtocol()을 사용하여 사용자 지정 연결 관리자의 새 연결에 적용하십시오.

나는 이것을 실제로 테스트하지는 않았지만, HttpClient 3.1 소스 코드를 한눈에 보면, 그렇게 될 것이라고 생각합니다. 나는 궁극적으로 어떻게이 문제를 해결하는지 듣고 싶다 :-). 행운을 빕니다!

+0

이렇게하면 모든 WebClient 인스턴스에 SOCKS 속성을 설정하게됩니다. 다른 인스턴스에 대해 다른 프록시 서버를 설정할 수 있어야합니다. – Fluffy

관련 문제