다음과 같이 코드 코드를 복사합니다.
org.apache.http.HttpEntity 가져오기;
org.apache.http.HttpHost 가져오기;
org.apache.http.HttpResponse 가져오기;
org.apache.http.client.HttpClient 가져오기;
org.apache.http.client.methods.HttpGet 가져오기;
org.apache.http.client.methods.HttpUriRequest 가져오기;
org.apache.http.entity.ContentType 가져오기;
org.apache.http.impl.client.DefaultHttpClient 가져오기;
org.apache.http.protocol.BasicHttpContext 가져오기;
org.apache.http.protocol.ExecutionContext 가져오기;
org.apache.http.protocol.HttpContext 가져오기;
org.apache.http.util.EntityUtils 가져오기;
공개 클래스 HttpClientDemo {
/**
* 리디렉션 후 URL 정보 가져오기
* @see HttpClient는 기본적으로 클라이언트 리디렉션을 자동으로 처리합니다.
* @즉, 웹 페이지 A에 액세스한 후 웹 페이지 B로 리디렉션된다고 가정하면 HttpClient는 자동으로 웹 페이지 B의 콘텐츠를 반환합니다.
* @see 웹페이지 B의 주소를 얻으려면 HttpContext 개체를 사용해야 합니다. HttpContext는 실제로 클라이언트가 여러 요청 및 응답 상호 작용에서 상태 정보를 유지하는 데 사용됩니다.
* @see 또한 HttpContext를 사용하여 필요한 일부 정보를 저장할 수 있으므로 다음 요청 시 사용할 수 있도록 이 정보를 꺼낼 수 있습니다.
*/
공개 정적 무효 getRedirectInfo(){
HttpClient httpClient = new DefaultHttpClient();
HttpContext httpContext = 새로운 BasicHttpContext();
HttpGet httpGet = new HttpGet("http://127.0.0.1:8088/blog/main.jsp");
노력하다 {
//HttpContext 객체를 매개변수로 실행() 메서드에 전달하면 HttpClient는 요청 응답 상호 작용 프로세스 중에 상태 정보를 HttpContext에 저장합니다.
HttpResponse 응답 = httpClient.execute(httpGet, httpContext);
//리디렉션 후 호스트 주소 정보(즉, "http://127.0.0.1:8088")를 가져옵니다.
HttpHost targetHost = (HttpHost)httpContext.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
//리디렉션 후 실제 요청 객체의 URI인 "/blog/admin/login.jsp"를 가져옵니다.
HttpUriRequest realRequest = (HttpUriRequest)httpContext.getAttribute(ExecutionContext.HTTP_REQUEST);
System.out.println("호스트 주소:" + targetHost);
System.out.println("URI 정보:" + realRequest.getURI());
HttpEntity 엔터티 = response.getEntity();
if(null != 엔터티){
System.out.println("응답 내용:" + EntityUtils.toString(entity, ContentType.getOrDefault(entity).getCharset()));
EntityUtils.consume(엔티티);
}
} 잡기(예외 e) {
e.printStackTrace();
}마지막으로{
httpClient.getConnectionManager().shutdown();
}
}
}