HttpClient 의 Get 과 Post

HTTP 프로 토 콜 은 인터넷 에서 많이 사용 되 는 프로 토 콜 로 점점 더 많은 자바 응용 프로그램 이 HTTP 프로 토 콜 을 통 해 네트워크 자원 에 직접 접근 해 야 한다.JDK 의 java. net 패키지 에는 HTTP 프로 토 콜 에 접근 하 는 기본 기능 인 HttpURLConnection 이 제공 되 어 있 습 니 다.HttpURLConnection 은 자바 의 표준 클래스 로 HttpURLConnection 은 URLConnection 에서 계승 하여 지정 한 사이트 에 GET 요청, POST 요청 을 보 낼 수 있 습 니 다.
       일반적인 상황 에서 웹 사이트 의 간단 한 페이지 가 요청 을 제출 하고 서버 응답 을 받 아야 한다 면 HttpURLConnection 은 충분히 감당 할 수 있 습 니 다.그러나 대부분의 경우 웹 사이트 의 웹 페이지 는 이렇게 간단 하지 않 을 수 있 습 니 다. 이 페이지 들 은 간단 한 URL 로 접근 할 수 있 는 것 이 아니 라 사용자 가 로그 인하 고 해당 하 는 권한 을 가 져 야 이 페이지 를 방문 할 수 있 습 니 다.이 경우 세 션, 쿠키 처리 가 필요 하 다. HttpURLConnection 을 사용 해 이런 디 테 일 을 처리 하려 면 물론 실현 가능 하 며 처리 만 어렵 다 는 것 이다.
       웹 사이트 에 대한 요청 을 잘 처리 하기 위해 서 는 Session, Cookie 등 세부 적 인 문 제 를 처리 하 는 것 을 포함 하여 아파 치 오픈 소스 조직 은 HttpClient 프로젝트 를 제공 합 니 다. 간단 한 HTTP 클 라 이언 트 (브 라 우 저 가 아 닌) 로 HTTP 요청 을 보 내 고 HTTP 응답 을 받 을 수 있 습 니 다.그러나 서버 의 응답 을 캐 시 하지 않 고 HTML 페이지 에 삽 입 된 자바 script 코드 를 실행 할 수 없습니다.페이지 내용 을 분석 하고 처리 하지 않 습 니 다.
       쉽게 말 하면 HttpClient 는 증강 판 HttpURLConnection 이 고 HttpURLConnection 이 할 수 있 는 일 HttpClient 는 모두 할 수 있 습 니 다.HttpURLConnection 이 제공 하지 않 은 일부 기능 은 HttpClient 도 제공 하지만 요청 을 어떻게 보 내 고 응답 을 받 으 며 HTTP 연결 을 관리 하 는 지 에 만 관심 이 있 습 니 다.
       HttpClient 를 사용 하여 요청 을 보 내 고 응답 을 받 는 것 은 간단 합 니 다. 다음 몇 단계 만 있 으 면 됩 니 다.
  • HttpClient 대상 을 만 듭 니 다.
  • GET 요청 을 보 내 려 면 HttpGet 대상 을 만 듭 니 다.POST 요청 을 보 내 려 면 HttpPost 대상 을 만 듭 니 다.
  • 요청 인 자 를 보 내 려 면 HttpGet, HttpPost 의 공동 setParams (HetpParams params) 방법 으로 요청 인 자 를 추가 할 수 있 습 니 다.HttpPost 대상 에 게 도 setEntity (HttpEntity entity) 방법 으로 요청 인 자 를 설정 할 수 있 습 니 다.
  • HttpClient 대상 의 execute (HttpUriRequest request) 를 호출 하여 요청 을 보 내 고 이 방법 을 실행 하여 HttpResponse 를 되 돌려 줍 니 다.
  • HttpResponse 의 getAllHeaders (), getHeaders (String name) 등 방법 으로 서버 응답 헤드 를 가 져 올 수 있 습 니 다.HttpResponse 의 getEntity () 방법 을 호출 하면 HttpEntity 대상 을 가 져 올 수 있 습 니 다. 이 대상 은 서버 의 응답 내용 을 포장 합 니 다.프로그램 은 이 대상 을 통 해 서버 의 응답 내용 을 가 져 올 수 있 습 니 다.

  •        그리고
    Android 는 HttpClient 를 성공 적 으로 통합 하 였 습 니 다. 이 는 개발 자가 직접 Android 응용 프로그램 에서 Httpclient 를 사용 하여 요청 을 제출 하고 응답 을 받 을 수 있 음 을 의미 합 니 다.
           예 를 들 어 안 드 로 이 드 애플 리 케 이 션 은 지정 한 페이지 에 요청 을 보 내야 하지만 이 페이지 는 간단 한 페이지 가 아 닙 니 다. 사용자 가 로그 인 했 고 로그 인 사용자 의 사용자 이름 이 유효 할 때 만 이 페이지 를 방문 할 수 있 습 니 다.보 호 된 페이지 에 HttpURLConnection 을 사용 하면 처리 해 야 할 세부 사항 이 너무 복잡 합 니 다.
           사실 웹 애플 리 케 이 션 에서 보 호 된 페이지 를 방문 할 때 브 라 우 저 를 사용 하 는 것 은 매우 간단 합 니 다. 사용자 가 시스템 을 통 해 제공 하 는 로그 인 페이지 로그 인 시스템 을 통 해 브 라 우 저 는 서버 와 의 Sesion 을 유지 하고 사용자 가 로그 인 한 사용자 이름, 비밀번호 가 요구 에 부합 되면 보 호 된 자원 에 접근 할 수 있 습 니 다.
           Android 응용 프로그램 에 서 는 HttpClient 를 사용 하여 시스템 에 로그 인 할 수 있 습 니 다. 프로그램 이 같은 HttpClient 를 사용 하여 요청 을 보 내 면 HttpClient 는 서버 와 의 Session 상 태 를 자동 으로 유지 합 니 다. 즉, 프로그램 이 처음으로 HttpClient 로그 인 시스템 을 사용 한 후 HttpClient 를 사용 하면 보호 페이지 에 접근 할 수 있 습 니 다.
          다음은 HttpClient 의 Get 과 Post 코드 를 간단하게 보 여 줍 니 다.     
    Get
    public String   (String s1,String s2){
        //1.       
        HttpClient client = new DefaultHttpClient();
        //2.    
        String urlGet = "http://ip:port/webname/table?s1=" +URLEncoder.encode(s1)+ "&s2" +URLEncode.encode(s2);
        HttpGet httpGet = new HttpGet(urlGet);
        //3.   
        HttpResponse response = client.execute(httpGet);//    
        int code = response.getStatusLine().getStatusCode();//     
        if(code == 200){//         
            InputStream is = response.getEntity().getContent();
            String s = StreamTools.readInputStream(is);
            return s;
        }else{
            return null;
        }
    }
    Post
    public String   (String s1,String s2){
        HttpClient client = new DefaultHttpClient();
        String urlPost = "http://ip:port/webname/table";
        HttpPost httpPost = new HttPost(urlPost);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("s1", s1));
            params.add(new BasicNameValuePair("s2", s2));
        request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
        HttpResponse response = client.execute(httpPost);
        int code = response.getStatusLine().getStatusCode();
        if(code == 200){
            InputStream is = response.getEntity().getContent();
            String s = StreamTools.readInputStream(is);
            return s;
        }else{
            return null;
        }    
    }
    다른 점,
    HttpClient 의 GetMethod 와 PostMethod 방법 은 기본적으로 버 리 고 사용 하지 않 습 니 다. HttpGet 과 HttpPost 로 대체 되 었 습 니 다.

    좋은 웹페이지 즐겨찾기