2017-01-23 4 views
1

나는 HttpClient 객체를위한 프록시 설정에 대한 아이디어를 얻으려고하고있다. 나는 그 아래의 코드를 발견했다.HttpClient 객체에 대한 프록시를 설정하면 어떻게됩니까?

HttpHost proxy = new HttpHost("proxy.com", 80, "http"); 
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy); 
CloseableHttpClient httpclient = HttpClients.custom() 
       .setRoutePlanner(routePlanner) 
       .build(); 

그리고 코드 아래 , 우리는 HttpClient를 위해이 같은 프록시를 지정해야하는 이유

/** 
* How to send a request via proxy. 
* 
* @since 4.0 
*/ 
public class ClientExecuteProxy { 

public static void main(String[] args)throws Exception { 
    CloseableHttpClient httpclient = HttpClients.createDefault(); 
    try { 
     HttpHost target = new HttpHost("httpbin.org", 443, "https"); 
     HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); 

     RequestConfig config = RequestConfig.custom() 
       .setProxy(proxy) 
       .build(); 
     HttpGet request = new HttpGet("/"); 
     request.setConfig(config); 

     System.out.println("Executing request " + request.getRequestLine() + " to " + target + " via " + proxy); 

     CloseableHttpResponse response = httpclient.execute(target, request); 
     try { 
      System.out.println("----------------------------------------"); 
      System.out.println(response.getStatusLine()); 
      System.out.println(EntityUtils.toString(response.getEntity())); 
     } finally { 
      response.close(); 
     } 
    } finally { 
     httpclient.close(); 
    } 
} 

} 

누군가가 설명 할 수 객체 어떻게 이러한 시나리오 모두에서 HttpClient를 개체 동작합니다?

답변

1

인터넷에 연결하려면 HTTP 프록시가 필요합니다. 웹 브라우저 프록시 설정과 유사하여 특정 네트워크에 액세스하려면 프록시를 구성해야합니다.

HTTPClient API 호출 또는 Java URL 호출과 동일하게 모방하려면 호출 세부 정보에 프록시 세부 정보가 제공되어야합니다. 다음과 같이 호출이 이루어집니다. 1. URL 제출이 의도 된 호스트 대신 프록시에 수행됩니다. 2. 그러면 프록시가 원하는 URL에 연결합니다.

이것은 포워드 프록시 시나리오 (때로는 역방향 프록시도 있음)이며 모든 네트워크 요청은 프록시를 통해 라우팅됩니다. 여기서 프록시는 진행중인 네트워크 호출에 표시되지 않습니다.

위의 두 예제는 httpclient 객체에 프록시를 설정합니다. 첫 번째 객체는 빌더 패턴을 사용하고 두 번째 매개 변수는 httpclient 내에서 프록시를 설정하는 단계 실행 단계입니다. 둘 다 똑같은 행동을하는 것 같습니다.

제 생각에는 여전히 JVM 프록시 옵션을 설정하여 Java 레벨 프록시 세부 사항을 구성해야합니다.

+0

응답 해 주셔서 감사합니다. "제 의견으로는 JVM 프록시 옵션을 설정하여 Java 레벨 프록시 세부 사항을 구성해야합니다." 이 진술을 자세히 설명해 주시겠습니까? – prime

+0

다음과 같이 VM 프록시 세부 정보를 설정할 수 있습니다. -Dhttp.proxyHost = hostname -Dhttp.proxyPort = port – amitmah

관련 문제