900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Java通过HttpClient4实现Https Get/Post请求

Java通过HttpClient4实现Https Get/Post请求

时间:2020-12-09 05:21:05

相关推荐

Java通过HttpClient4实现Https Get/Post请求

Maven配置

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.8</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.3</version></dependency>

SSLClient类源码

import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.cert.X509Certificate;import java.util.Arrays;import .ssl.SSLContext;import .ssl.TrustManager;import .ssl.X509TrustManager;import org.apache.http.client.config.AuthSchemes;import org.apache.http.client.config.CookieSpecs;import org.apache.http.client.config.RequestConfig;import org.apache.http.config.Registry;import org.apache.http.config.RegistryBuilder;import org.apache.http.conn.socket.ConnectionSocketFactory;import org.apache.http.conn.socket.PlainConnectionSocketFactory;import org.apache.http.conn.ssl.NoopHostnameVerifier;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;/*** @author 作者: Alderaan* @version 创建时间:3月3日 上午10:24:40**/public class SSLClient extends HttpClientBuilder{public CloseableHttpClient getSSLClient() throws Exception{try{// 在调用SSL之前需要重写验证方法,取消检测SSLX509TrustManager trustManager = new X509TrustManager(){public X509Certificate[] getAcceptedIssuers(){return null;}public void checkClientTrusted(X509Certificate[] xcs, String str){}public void checkServerTrusted(X509Certificate[] xcs, String str){}};SSLContext ctx = SSLContext.getInstance(SSLConnectionSocketFactory.TLS);ctx.init(null, new TrustManager[] {trustManager }, null);SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(ctx,NoopHostnameVerifier.INSTANCE);// 创建RegistryRequestConfig requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD_STRICT).setExpectContinueEnabled(Boolean.TRUE).setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST)).setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build();Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.INSTANCE).register("https", socketFactory).build();// 创建ConnectionManager,添加Connection配置信息PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(connectionManager).setDefaultRequestConfig(requestConfig).build();return closeableHttpClient;} catch (KeyManagementException ex){throw new RuntimeException(ex);} catch (NoSuchAlgorithmException ex){throw new RuntimeException(ex);}}}

App类源码

import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.util.EntityUtils;/*** @author 作者: Alderaan* @version 创建时间:3月3日 上午10:22:23**/public class App{public static void testhttpsget(String url){HttpClient httpClient = null;HttpGet httpGet = null;String result = null;try{httpClient = new SSLClient().getSSLClient();httpGet = new HttpGet(url);// 设置参数// httpGet.addHeader("Accept", "application/json");// httpGet.addHeader("Content-Type", "application/json;charset=UTF-8");HttpResponse response = httpClient.execute(httpGet);if (response != null){HttpEntity resEntity = response.getEntity();if (resEntity != null){result = EntityUtils.toString(resEntity, "UTF-8");if (200 == response.getStatusLine().getStatusCode()){System.out.println("HTTPS Get请求成功!");System.out.println(result);} else{System.out.println("HTTPS Get错误码:" + response.getStatusLine().getStatusCode());System.out.println(result);}}}} catch (Exception ex){ex.printStackTrace();}return;}public static void testhttpspost(String url){HttpClient httpClient = null;HttpPost httpPost = null;String result = null;try{httpClient = new SSLClient().getSSLClient();httpPost = new HttpPost(url);// 设置参数// httpPost.addHeader("Accept", "application/json");// httpPost.addHeader("Content-Type", "application/json;charset=UTF-8");HttpResponse response = httpClient.execute(httpPost);if (response != null){HttpEntity resEntity = response.getEntity();if (resEntity != null){result = EntityUtils.toString(resEntity, "UTF-8");if (200 == response.getStatusLine().getStatusCode()){System.out.println("HTTPS Post请求成功!");System.out.println(result);} else{System.out.println("HTTPS Post错误码:" + response.getStatusLine().getStatusCode());System.out.println(result);}}}} catch (Exception ex){ex.printStackTrace();}return;}public static void main(String[] args){System.out.println("开始测试HTTPS Get请求。");testhttpsget("");System.out.println("开始测试HTTPS Post请求。(百度不响应Post,所以会返回错误码)");testhttpspost("/s?wd=post");}}

运行结果如下

开始测试HTTPS Get请求。HTTPS Get请求成功!<!DOCTYPE html><!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=///img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=///s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href= name=tj_trnews class=mnav>新闻</a> <a href= name=tj_trhao123 class=mnav>hao123</a> <a href= name=tj_trmap class=mnav>地图</a> <a href= name=tj_trvideo class=mnav>视频</a> <a href= name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=///more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=>关于百度</a> <a href=>About Baidu</a> </p> <p id=cp>&copy;&nbsp;Baidu&nbsp;<a href=/duty/>使用百度前必读</a>&nbsp; <a href=/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=///img/gs.gif> </p> </div> </div> </div> </body> </html>开始测试HTTPS Post请求。(百度查询是Get请求,所以会返回错误码)错误码:302<html><head><title>302 Found</title></head><body bgcolor="white"><center><h1>302 Found</h1></center><hr><center>nginx</center></body></html>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。