[를 켜고] 자바 외부 인터페이스 API를 호출, HTTP 요청을 시뮬레이션 (a) 다음과 HttpURLConnection의 차이 HttpClient를

  JAVA 및 org.apache.http.client.HttpClient java.net.HttpURLConnection 두 클래스에서, HTTP 요청의 아날로그 구현 될 수있다.

  HttpURLConnection의의 JDK 모든 동작 HTTP 요청을 구현하는 클래스를 제공하는 것을 특징으로하지만 때문에 원자쪽으로 편향 동작에있어서, 따라서, 간단하고 복잡하고 번거로운 대한 HttpURLConnection의 HTTP 요청은 HTTP 요청을 달성 중. HttpClient를 클래스와, 특히 좋은 최적화를 달성하기 위해 만든 복잡한 HTTP 요청을 더 HttpURLConnection의 패키지가된다.

재판 참고 : "중국 어선"에서 재현 다음 텍스트 내용 
면책 조항 :이 문서는 CC 다음에 원래 문서 CSDN 블로거 "중국 어선"이며, 4.0 부산물 SA 저작권 계약, 복제, 첨부하시기 바랍니다 원본 소스 링크와이 문장. 
원본 링크 : HTTPS : // blog.csdn.net/amosjob/article/details/82782546

시작 --------- ------- 텍스트

A, HttpURLConnection의 객체

  1. HttpURLConnection의 수업의 URL 대해서 openConnection () 방법에 의해 수득 할 필요가있는 개체는 직접 생성 될 수 없다.

HttpsURLConnection는 urlconn = ; 
URL의 URL = URL (주소); 
urlconn = (HttpsURLConnection는) url.openConnection ();

  2. HttpURLConnection의 연결 () 함수, 실제로 서버와의 TCP 연결을 설정 및 HTTP 요청을 전송은 실용적이지 않다. HTTP 요청은 우리가 실제로 공식 보냈습니다 (예 : 통화는 getInputStream (), getResponseCode () 메소드 등) 서버 응답 데이터를 얻을 때까지. 및 구성된 HttpURLConnection의 객체 연결 () 메소드가 실행되기 전에 완료해야한다.

urlconn = (HttpsURLConnection는) url.openConnection (); 
urlconn.setRequestMethod ( "GET" ); 
urlconn.setConnectTimeout ( 5000 ); 
urlconn.setReadTimeout ( 5000 ); 
(urlconn.setUseCaches 거짓 ); 
urlconn.connect ();

  3. HttpURLConnection의는 기본 소켓 통신에 의해 구현되는 HTTP 프로토콜을 기반으로합니다. 당신이 제한 시간 (타임 아웃)을 설정하지 않은 경우, 비정상적인 네트워크 조건에서이 프로그램이 죽었을 계속하지 않는 원인이 될 수 있습니다.

공공 HttpURLConnection의 (URL의 URL, String를, 값 int i)는 {
  (URL, 새로운 프록시 (java.net.Proxy.Type.HTTP, 
InetSocketAddress.createUnresolved (S, I))); 
}

  HTTP 본체의 OutputStream 스트림 작성 내지 4 콘텐츠 스트림에 기록 된 데이터를 바로 네트워크로 전송되지 않지만, 현재의 종료가 생성 될 때 상기 버퍼 메모리에 콘텐츠 기록 HTTP 본체에 기초 .

  의 getInputStream () 메서드 호출로 HTTP 서버의 입력 스트림을 돌려 5. 읽기 요청 된 정보를 반환합니다.

의 InputStream inputStream을 = urlconn.getInputStream (); 
InputStreamReader inputStreamReader = 새로운 InputStreamReader (대한 InputStream "UTF-8" ); 
BufferedReader로 버프 = 의 BufferedReader (inputStreamReader); 
문자열 라인 = buff.readLine ();
반면 (라인! = null의 ) { 
에서 System.out.println (행); 
라인 = buff.readLine (); 
} 
inputStream.close (); 
inputStreamReader.close (); 
() buff.close;

  6. 우리는 HttpURLConnection.connect () 수동으로 HTTP 요청을 전송의 방법을 사용할 수 있지만 요청이 자동으로 시작되는 경우 HTTP 응답을 받기를 원한다면, 예를 들어, 우리는 사용 HttpURLConnection.getInputStream () 시간의 방법, 그래서 필요가 없습니다 () 메소드를 호출 연결.

 

두, HttpClient를 객체

  HttpClient를는 HttpURLConnection의 세션 쿠키의 처리 목적에 비해 단순화된다.

  HttpClient를이 HttpURLConnection의 모든 객체가 할 수있는 할 수있는 HttpURLConnection의, HttpClient를의 향상된 버전이라고 할 수있다.

  오픈 소스 아파치 HttpClient를은 아닌 브라우저는 HTTP 요청을 보내도록 구성되어, 간단한 HTTP 클라이언트입니다 HTTP 응답을 수신 제공됩니다. 그러나 서버의 응답은 캐시되지 않습니다. 그냥 어떻게 전송 요구에 초점 응답을 수신하고, HTTP 연결을 관리 할 수 ​​있습니다.

 

HttpClient를 사용

다음 단계만큼, 전송 요청이 응답을 수신하는 것은 매우 간단합니다 HttpClient를 사용합니다.

  1. 创建 HttpClient를 对象, CloseableHttpClient HttpClient를 HttpClients.createDefault = ();

  당신이 GET 요청을 전송해야하는 경우 2. 객체를 생성 HttpGet, 당신은 HttpPost 객체를 생성 할 수있는 POST 요청을 보내야합니다.

  3. 송신 요청 파라미터, HttpGet, HttpPost setHeader () 메소드 또는 요청 파라미터를 추가 addHeader () 메소드 일반적인 호출 될 수 있으면 HttpPost위한 목적 setEntity (방법 설정 요청 파라미터를 호출 할 수있다.

UrlEncodedFormEntity 엔티티 = 새로운 UrlEncodedFormEntity (PARAMS); 
httpPost.setEntity (엔티티);

  4. 통화 HttpClient를 오브젝트 실행 (HttpUriRequest 요청) 전송 요청은 상기 방법을 수행하는 단계를 HttpResponse에 반환한다.

  5. HttpResponse에의 getAllHeaders (), 대해 getHeaders (문자열 이름) 또는 첫 번째 서버에 대한 응답으로 얻을 수 등을 전화, 전화 HttpResponse에 getEntity () 메소드가 패키지에 대한 응답으로 HttpEntity 객체 콘텐츠 서버 가져옵니다. 객체에 응답하여 컨텐츠 서버를 통해 사용할 프로그램.

텍스트 END --------- -------

셋째, 권장 읽기

  1. HttpClient를 그 차이 HttpURLConnection의
  2. HttpClient를 사용하고 차이의 HttpURLConnection의
  3. HttpClient를 GET / POST 요청의 예를 구현
  4. HTTPClent 이진 데이터 업로드 예제
  5. HttpURLConnection의 GET / POST 요청의 예를 구현

 

추천

출처www.cnblogs.com/newbie27/p/11404365.html