zoukankan      html  css  js  c++  java
  • HTTP/HTTPS GET&POST两种方式的实现方法

    关于GET及POST方式的区别请参照前面文章:
    http://www.cnblogs.com/hunterCecil/p/5698604.html

    http://www.cnblogs.com/hunterCecil/p/5661459.html

    本文具体说明HTTP/HTTPS下GET&POST两种方式的实现方法

    公共实现类如下:

    public class HttpCommonUtil {
    
        private HttpCommonUtil () {
        }
    
        public static String post(String url, String body) {
            if (url.startsWith("https"))
                return httpsPost(url, body);
            else
                return httpPost(url, body);
        }
    
        private static String httpPost(String url, String body) {
            Client client = ClientBuilder.newClient();
            WebTarget target = client.target(url);
            Response response = target.request()
                    .buildPost(Entity.entity(body, MediaType.APPLICATION_JSON)).invoke();
            String re = response.readEntity(String.class);
            response.close();
            LOG.info("http post返回数据: " + re);
            return re;
        }
    
        private static String httpsPost(String url, String body) {
            ClientConfig clientConfig = new ClientConfig().connectorProvider(new HttpUrlConnectorProvider());
            SSLContext sc = null;
            try {
                sc = SSLContext.getInstance("TLS");
                sc.init(null, new TrustManager[]{new ParkingTrustManager()}, new SecureRandom());
            } catch (NoSuchAlgorithmException e) {
                LOG.error(e);
            } catch (KeyManagementException e) {
                LOG.error(e);
            }
            HostnameVerifier verifier = new HostnameVerifier() {
                @Override
                public boolean verify(String s, SSLSession sslSession) {
                    return true;
                }
            };
            Client client = ClientBuilder.newBuilder().withConfig(clientConfig)
                    .sslContext(sc).hostnameVerifier(verifier).build();
    
            WebTarget target = client.target(url);
            Response response = target.request()
                    .buildPost(Entity.entity(body, MediaType.APPLICATION_JSON)).invoke();
            String re = response.readEntity(String.class);
            response.close();
            LOG.info("https post返回数据: " + re);
            return re;
        }
    
        static class ParkingTrustManager implements TrustManager, X509TrustManager {
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
    
            public void checkServerTrusted(X509Certificate[] certs, String authType)
                    throws CertificateException {
                return;
            }
    
            public void checkClientTrusted(X509Certificate[] certs, String authType)
                    throws CertificateException {
                return;
            }
        }
    
        public static String get(String url) {
            if (url.startsWith("https"))
                return httpsGet(url);
            else
                return httpGet(url);
        }
    
        private static String httpsGet(String url) {
            ClientConfig clientConfig = new ClientConfig().connectorProvider(new HttpUrlConnectorProvider());
            SSLContext sc = null;
            try {
                sc = SSLContext.getInstance("TLS");
                sc.init(null, new TrustManager[]{new ParkingTrustManager()}, new SecureRandom());
            } catch (NoSuchAlgorithmException e) {
                LOG.error(e);
            } catch (KeyManagementException e) {
                LOG.error(e);
            }
            HostnameVerifier verifier = new HostnameVerifier() {
                @Override
                public boolean verify(String s, SSLSession sslSession) {
                    return true;
                }
            };
    
            Client client = ClientBuilder.newBuilder().withConfig(clientConfig)
                    .sslContext(sc).hostnameVerifier(verifier).build();
    
            WebTarget target = client.target(url);
            Response response = target.request().buildGet().invoke();
            String re = response.readEntity(String.class);
            response.close();
            LOG.info("https post返回数据: " + re);
            return re;
        }
    
        private static String httpGet(String url) {
            Client client = ClientBuilder.newClient();
            WebTarget target = null;
            target = client.target(url);
            Response response = target.request().buildGet().invoke();
            String re = response.readEntity(String.class);
            response.close();
            LOG.info("http post返回数据: " + re);
            return re;
        }
    } 

    测试类:

  • 相关阅读:
    分治与线段树
    PAT甲级 1006
    PAT甲级 1001
    单源最短路 Dijkstra
    图的邻接矩阵与邻接表
    Huffman树 建树方法代码实现
    小根堆模板类
    二叉搜索树的搜索和插入与删除算法优化
    完全二叉树模板
    二叉树模板及二叉树的无递归遍历
  • 原文地址:https://www.cnblogs.com/hunterCecil/p/8000859.html
Copyright © 2011-2022 走看看