2015-01-26 4 views
0

외부 서버에 연결해야하는 Junit/Integration 테스트를 빌드하려고합니다. 그러나 나는 프록시를 지나칠 수 없다. 407 빈 인증 페이지 오류가 발생합니다.단위 테스트 apache http 클라이언트 프록시 407

은 테스트 설정 내가 지금 모든 프록시 설정이 100 % 정확

@Before 
public void onSetUp() throws Exception { 

    System.setProperty("http.proxyHost", "webproxy-nl.test.com"); 
    System.setProperty("http.proxyPort", "8080"); 
    System.setProperty("https.proxyHost", "webproxy-nl.test.com"); 
    System.setProperty("https.proxyPort", "8080"); 

    System.setProperty("http.proxyUser", "DOM\\lalal"); 
    System.setProperty("http.proxyPassword", "tesssst"); 

    System.setProperty("https.proxyUser", "DOM\\lalala"); 
    System.setProperty("https.proxyPassword", "sldjsdkl"); 
} 

를 사용합니다. 나는 nonproxyhosts도 추가했다.

여기서 내가 어떻게 구성 할 수 있는지 알 수 없습니다.

반환 메시지는 다음과 같습니다

Http request failed: HTTP/1.1 407 BlankAuthenticationPage [status code 407] 

UPDATE

나는 CloseableHttpClient를 사용하는 테스트 스텁을 만들었습니다. 이 여전히 내게 http 407 오류를 제공합니다.

private CloseableHttpClient httpClient; 

public IDealHttpClientStub() { 

    LOG.debug("Creating IDealHttpClientStub"); 

    System.setProperty("http.proxyHost", "webproxy-nl.test.com"); 
    System.setProperty("http.proxyPort", "8080"); 
    System.setProperty("https.proxyHost", "webproxy-nl.test.com"); 
    System.setProperty("https.proxyPort", "8080"); 

    System.setProperty("http.proxyUser", "DOM\\lalal"); 
    System.setProperty("http.proxyPassword", "tesssst"); 

    System.setProperty("https.proxyUser", "DOM\\lalala"); 
    System.setProperty("https.proxyPassword", "sldjsdkl"); 

    this.httpClient = HttpClients.custom().useSystemProperties().build(); 
} 

답변

0

나는 다음과 같은 impl을 사용하여 그것을 수행했다.

private CloseableHttpClient httpClient; 

public HttpClientStub() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException { 

    // Trust all certs 
    SSLContext sslcontext = buildSSLContext(); 

    // Allow TLSv1 protocol only 
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null, 
      SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 

    HttpHost proxy = new HttpHost("someproxy", 8080, "http"); 
    DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy); 

    CredentialsProvider credsProvider = new BasicCredentialsProvider(); 

    credsProvider.setCredentials(
      new AuthScope("someproxy", 8080, AuthScope.ANY_HOST, "ntlm"), new NTCredentials(
        "itsme", "xxxx", "", "MYDOMAIN")); 

    this.httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider) 
      .setRoutePlanner(routePlanner).setSSLSocketFactory(sslsf).build(); 

} 

private static SSLContext buildSSLContext() throws NoSuchAlgorithmException, KeyManagementException, 
     KeyStoreException { 
    SSLContext sslcontext = SSLContexts.custom().setSecureRandom(new SecureRandom()) 
      .loadTrustMaterial(null, new TrustStrategy() { 

       @Override 
       public boolean isTrusted(java.security.cert.X509Certificate[] chain, String authType) 
         throws java.security.cert.CertificateException {       
        return true; 
       } 
      }).build(); 
    return sslcontext; 
} 

그런 다음 프록시를 구성한 HTTP (테스트) 클라이언트가 있습니다.

0

HttpClient는 명시 적으로 그렇게하지 않는 한 시스템 속성을 사용하지 않습니다.

CloseableHttpClient client1 = HttpClients.createSystem(); 
CloseableHttpClient client2 = HttpClients.custom() 
     .useSystemProperties() 
     .build(); 
+0

이 작동하지 않습니다. CloseableHttpClient 주위에 테스트를 만들었습니다. 여전히 동일한 407 오류가 발생합니다. 내 업데이트 된 질문보기 –

+0

거기에는 여러 가지 이유가있을 수 있습니다. 서버가 지원하도록 구성된 인증 스키마는 무엇입니까? HC는 어떤 계획을 인증하도록 선택합니까? 그것은 NTLM입니까? 신임장에 NT 도메인이 들어있는 것 같습니다. – oleg