JAVA가 HttpClient를 이용한 POST 요청(HTTPS) 인스턴스

최근에 고객의 인터페이스를 포장하고 자신의 다른 시스템에서 호출해야 한다. 고객 인터페이스는 HTTP URL로 이루어진다. 나는 HttpClient 패키지로 요청하고 싶다. 또한 요청한 URL은 HTTPS의 것이기 때문에 인증서가 필요하지 않기 위해 하나의 클래스로 DefaultHttpClient 클래스를 계승하고 검사 과정을 무시한다.
1. SSLClient 클래스를 작성하여 HttpClient로 상속

package com.pcmall.service.sale.miaomore.impl; 
 
import java.security.cert.CertificateException;  
import java.security.cert.X509Certificate;  
import javax.net.ssl.SSLContext;  
import javax.net.ssl.TrustManager;  
import javax.net.ssl.X509TrustManager;  
import org.apache.http.conn.ClientConnectionManager;  
import org.apache.http.conn.scheme.Scheme;  
import org.apache.http.conn.scheme.SchemeRegistry;  
import org.apache.http.conn.ssl.SSLSocketFactory;  
import org.apache.http.impl.client.DefaultHttpClient;  
// Https HttpClient  
public class SSLClient extends DefaultHttpClient{  
  public SSLClient() throws Exception{  
    super();  
    SSLContext ctx = SSLContext.getInstance("TLS");  
    X509TrustManager tm = new X509TrustManager() {  
        @Override  
        public void checkClientTrusted(X509Certificate[] chain,  
            String authType) throws CertificateException {  
        }  
        @Override  
        public void checkServerTrusted(X509Certificate[] chain,  
            String authType) throws CertificateException {  
        }  
        @Override  
        public X509Certificate[] getAcceptedIssuers() {  
          return null;  
        }  
    };  
    ctx.init(null, new TrustManager[]{tm}, null);  
    SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  
    ClientConnectionManager ccm = this.getConnectionManager();  
    SchemeRegistry sr = ccm.getSchemeRegistry();  
    sr.register(new Scheme("https", 443, ssf));  
  }  
}  
2. HttpClient를 이용하여post 요청을 보내는 클래스 쓰기

package com.pcmall.service.sale.miaomore.impl; 
 
import java.util.ArrayList;  
import java.util.Iterator;  
import java.util.List;  
import java.util.Map;  
import java.util.Map.Entry;  
import org.apache.http.HttpEntity;  
import org.apache.http.HttpResponse;  
import org.apache.http.NameValuePair;  
import org.apache.http.client.HttpClient;  
import org.apache.http.client.entity.UrlEncodedFormEntity;  
import org.apache.http.client.methods.HttpPost;  
import org.apache.http.message.BasicNameValuePair;  
import org.apache.http.util.EntityUtils;  
/* 
 *  HttpClient post  
 */  
public class HttpClientUtil {  
  public String doPost(String url,Map<String,String> map,String charset){  
    HttpClient httpClient = null;  
    HttpPost httpPost = null;  
    String result = null;  
    try{  
      httpClient = new SSLClient();  
      httpPost = new HttpPost(url);  
      //   
      List<NameValuePair> list = new ArrayList<NameValuePair>();  
      Iterator iterator = map.entrySet().iterator();  
      while(iterator.hasNext()){  
        Entry<String,String> elem = (Entry<String, String>) iterator.next();  
        list.add(new BasicNameValuePair(elem.getKey(),elem.getValue()));  
      }  
      if(list.size() > 0){  
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,charset);  
        httpPost.setEntity(entity);  
      }  
      HttpResponse response = httpClient.execute(httpPost);  
      if(response != null){  
        HttpEntity resEntity = response.getEntity();  
        if(resEntity != null){  
          result = EntityUtils.toString(resEntity,charset);  
        }  
      }  
    }catch(Exception ex){  
      ex.printStackTrace();  
    }  
    return result;  
  }  
}  
3.post가 요청한 테스트 코드 호출

package com.pcmall.service.sale.miaomore.impl; 
 
import java.util.HashMap;  
import java.util.Map;  
//   
public class TestMain {  
  private String url = "https://xxx.xxx.xxx/";  
  private String charset = "utf-8";  
  private HttpClientUtil httpClientUtil = null;  
    
  public TestMain(){  
    httpClientUtil = new HttpClientUtil();  
  }  
    
  public void test(){  
    String httpOrgCreateTest = url + "xxx/xxx/delivery";  
    Map<String,String> createMap = new HashMap<String,String>();  
    createMap.put("delivery_code","1D1QZ222Z22SM21A");  
    createMap.put("timestamp","1479198840000");  
    createMap.put("sign","F2109C333F3EADE929F932E89703FA0F683D43EB");  
    String httpOrgCreateTestRtn = httpClientUtil.doPost(httpOrgCreateTest,createMap,charset);  
    System.out.println("result:"+httpOrgCreateTestRtn);  
  }  
    
  public static void main(String[] args){  
    TestMain main = new TestMain();  
    main.test();  
  }  
}  
처음에 BasicNameValuePair의 사용법을 잘 몰랐는데 나중에 천천히 더듬어 보니 BasicNameValuePair는 키 값이 맞는 클래스를 저장하고 새로운 키와value값을 추가하면 http의 형식으로 자동으로 바뀌어 =와 & 기호, 예를 들어https://xxx.xxx.xxx/xxx/xxxx/delivery?delivery_code=DQZZSM2A×tamp=1479198840000&sign=F209C33FEADE99F93E8970FA0F68D3EB, 우리는 모두 스스로 조립과 매칭을 할 필요가 없습니다. 개인적으로 사용하기에 매우 편리하고 정확도가 높기 때문에 여러분에게 도움이 될 수 있기를 바랍니다!
지금까지 여러분을 위해 가져온 JAVA가 HttpClient를 이용하여 POST 요청(HTTPS) 실례를 모두 담고 있습니다. 많은 응원 부탁드립니다~

좋은 웹페이지 즐겨찾기