当前位置: 移动互联网学院 > Java培训 > JAVA开发 > 使用HttpClient对HTTPS接口调用
使用HttpClient对HTTPS接口调用 时间:2017-09-14     来源:移动互联网学院

本文介绍了JAVA利用HttpClient进行HTTPS接口调用的方法,分享给大家,具体如下:

1.为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程。

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;

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请求的工具类

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.StatusLine;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.message.BasicHeader;

import org.apache.http.util.EntityUtils;

public class HttpClientUtil {

  @SuppressWarnings("resource")

  public static String doPost(String url,String jsonstr,String charset){

    HttpClient httpClient = null;

    HttpPost httpPost = null;

    String result = null;

    try{

      httpClient = new SSLClient();

      httpPost = new HttpPost(url);

      httpPost.addHeader("Content-Type", "application/json");

      StringEntity se = new StringEntity(jsonstr);

      se.setContentType("text/json");

      se.setContentEncoding(new BasicHeader("Content-Type", "application/json"));

      httpPost.setEntity(se);

      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.测试代码

public static void main(String[] args){

    String url = "https://192.168.1.101/xxx";

    String jsonStr = "{xxx}";

    String httpOrgCreateTestRtn = HttpClientUtil.doPost(url, jsonStr, "utf-8");

  }

X