JAVA利用HttpClient进行HTTPS接口调用

虾米姐 阅读:863 2020-10-12 22:00:27 评论:0

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; 
 
/** 
 * 用于进行Https请求的HttpClient  
 * @ClassName: SSLClient  
 * @Description: TODO 
 * @author Devin <xxx>  
 * @date 2017年2月7日 下午1:42:07  
 *   
 */ 
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; 
/** 
 * 利用HttpClient进行post请求的工具类 
 * @ClassName: HttpClientUtil  
 * @Description: TODO 
 * @author Devin <xxx>  
 * @date 2017年2月7日 下午1:43:38  
 *   
 */ 
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"); 
    }

 

标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号