• Java发送https请求


    1、前文:通过webService发送https请求,有两种版本,一种是携带证书验证(比较麻烦),另外一种就是直接忽略证书,本文提供的就是第二种(本人已测试过)

    2、最简易代码:

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.Reader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.text.SimpleDateFormat;
    
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLSession;
    
    @SuppressWarnings("all")
    public class TestAPI_https {
        public static void main(String args[]) throws Exception {
            new TestAPI_https().TestRiQingAPI_SaleOrder();
        }
    
        public static void TestRiQingAPI_SaleOrder() throws Exception {
            
            String postData = getJson();
            //String url = "https://*****";
            String url = "https://*****";
            HttpsURLConnection conn = null;
            OutputStream out = null;
            String rsp = null;
            byte[] byteArray = postData.getBytes("utf-8");
            try {
                URL uri = new URL(url);
                conn = (HttpsURLConnection) uri.openConnection();
                //忽略证书验证--Begin
                conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
                //忽略证书验证--End
                conn.setRequestMethod("POST");
                conn.setDoInput(true);
                conn.setDoOutput(true);
                conn.setRequestProperty("Host", uri.getHost());
                conn.setRequestProperty("Content-Type", "application/json");
                out = conn.getOutputStream();
                out.write(byteArray);
                out.close();
                if(conn.getResponseCode()==200) {
                    rsp = getStreamAsString(conn.getInputStream(), "utf-8");
                }else {
                    rsp = getStreamAsString(conn.getErrorStream(), "utf-8");
                }
                
                System.out.println(rsp);
    
            } catch (Exception e) {
                if(null!=out)
                    out.close();
                e.printStackTrace();
                
            }
            
        }
        
        /**
         * getJson
         * 
         */
        private static String getJson() {
            return "{" + ""name"" + ":" + ""robo_blogs_zh123"" + "}";
        }
    
        private static String getStreamAsString(InputStream stream, String charset) throws IOException {
            try {
                Reader reader = new InputStreamReader(stream, charset);
                StringBuilder response = new StringBuilder();
    
                final char[] buff = new char[1024];
                int read = 0;
                while ((read = reader.read(buff)) > 0) {
                    response.append(buff, 0, read);
                }
    
                return response.toString();
            } finally {
                if (stream != null) {
                    stream.close();
                }
            }
        }
    
    }
    
    //定制Verifier
    class TrustAnyHostnameVerifier implements HostnameVerifier {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    }
  • 相关阅读:
    数据结构与算法----双向链表
    数据结构与算法----数学应用之一元多项式
    数据结构----线性表顺序和链式结构的使用(c)
    Android--Otto事件总线 -- 组件之间通讯框架使用 --模式解析
    递归 —— 二分查找法 —— 归并排序
    自己做悬浮拖拽按钮依赖
    RePlugin 插件化-内置加载
    Android图片处理--缩放
    数据结构与算法---常用三大排序算法
    Android图片处理--全景查看效果
  • 原文地址:https://www.cnblogs.com/hzb462606/p/10968862.html
Copyright © 2020-2023  润新知