Java에서 HttpClient를 사용하여 포스트 요청 인스턴스 구현

4383 단어 httpclientjava
프로젝트 수요를 바탕으로 포스트 메시지 전송을 실현하고자 하기 때문에 HttpClient 구성 요소로 실현하고 관련 코드는 다음과 같다(주: 프로그램이 사용하는 httpclient와 httpcore 의존 패키지의 버전은 4.2.5).

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import java.util.UUID;
import net.sf.json.JSONObject;
import java.nio.charset.Charset;

public static boolean httpPostWithJson(JSONObject jsonObj,String url,String appId){
  boolean isSuccess = false;
  
  HttpPost post = null;
  try {
    HttpClient httpClient = new DefaultHttpClient();

    //  
    httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 2000);
    httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 2000);
      
    post = new HttpPost(url);
    //  
    post.setHeader("Content-type", "application/json; charset=utf-8");
    post.setHeader("Connection", "Close");
    String sessionId = getSessionId();
    post.setHeader("SessionId", sessionId);
    post.setHeader("appid", appid);
          
    //  
    StringEntity entity = new StringEntity(jsonObj.toString(), Charset.forName("UTF-8"));
    entity.setContentEncoding("UTF-8");
    //  Json 
    entity.setContentType("application/json");
    post.setEntity(entity);
      
    HttpResponse response = httpClient.execute(post);
      
    //  
    int statusCode = response.getStatusLine().getStatusCode();
    if(statusCode != HttpStatus.SC_OK){
      LogUtil.info(" : "+statusCode);
      isSuccess = false;
    }else{
      int retCode = 0;
      String sessendId = "";
      //  retCode Id
      for(Header header : response.getAllHeaders()){
        if(header.getName().equals("retcode")){
          retCode = Integer.parseInt(header.getValue());
        }
        if(header.getName().equals("SessionId")){
          sessendId = header.getValue();
        }
      }
      
      if(ErrorCodeHelper.IAS_SUCCESS != retCode ){
        //  
        LogUtil.info("error return code, sessionId: "sessendId"\t"+"retCode: "+retCode);
        isSuccess = false;
      }else{
        isSuccess = true;
      }
    }
  } catch (Exception e) {
    e.printStackTrace();
    isSuccess = false;
  }finally{
    if(post != null){
      try {
        post.releaseConnection();
        Thread.sleep(500);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
  return isSuccess;
}

//  Id
public static String getSessionId(){
  UUID uuid = UUID.randomUUID();
  String str = uuid.toString();
  return str.substring(0, 8) + str.substring(9, 13) + str.substring(14, 18) + str.substring(19, 23) + str.substring(24);
}
Ps: Hadoop 클러스터를 사용하여 POST 요청을 보낼 때 "java.lang.NoSuchFieldError: INSTANCE"문제가 발생했습니다. 이런 문제는 일반적으로'jar 패키지 충돌'문제 때문이지만 이상하게도 로컬pom입니다.xml 설정된 의존 패키지에는 이 필드가 있습니다. 관련 httpclient 의존 패키지는 다음과 같습니다.

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.4.1</version>
</dependency>
<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpcore</artifactId>
  <version>4.4.1</version>
</dependency>  
그 후에 인터넷에서 뒤져서 문제를 찾은 이유는 Hadoop 집단이 프로그램을 실행할 때 먼저 자신의 관련 디렉터리에 있는jar 패키지를 불러옵니다. 자신의 디렉터리에서 찾지 못하면 프로그램이 실행할 때 지정한jar 패키지를 불러옵니다. Hadoop 집단에 있는jar 패키지 경로를 찾았을 때 httpclient의 관련 의존 패키지가 4.2.5인 것을 발견하여pom을 불러옵니다.xml 프로필도 이 버전으로 업데이트되고 프로그램이 실행됩니다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기