多语言展示
当前在线:1515今日阅读:181今日分享:30

java如何发起https的get请求,post请求和put请求

java发起https还是比较麻烦的,不过我们可以封装一个工具类来帮我们方便的进行https请求
方法/步骤
1

首先创建MyHttps的工具类

2

然后引入一个通用的证书管理器类,进行https请求的时候要用到import java.security.cert.CertificateException;  import java.security.cert.X509Certificate;  import javax.net.ssl.X509TrustManager;    public class MyX509TrustManager implements X509TrustManager {        @Override      public void checkClientTrusted(X509Certificate[] chain, String authType)              throws CertificateException {          // TODO Auto-generated method stub        }        @Override      public void checkServerTrusted(X509Certificate[] chain, String authType)              throws CertificateException {          // TODO Auto-generated method stub        }        @Override      public X509Certificate[] getAcceptedIssuers() {          // TODO Auto-generated method stub          return null;      }    }

3

首先写入https的get请求,参数为请求地址和请求头键值对,返回值为响应头键值对与String类型的返回内容组成的Object数组/**     * 发起Https的get请求     * @param property 请求头参数     * @url 请求的地址     * @return 响应内容[Map>(响应头),String(响应体)]     */    public static Object[] get(String url,LinkedHashMap property) {        Map> headerFields = null;        StringBuffer buffer=null;          try{          //创建SSLContext          SSLContext sslContext=SSLContext.getInstance('TLS');          TrustManager[] tm={new MyX509TrustManager()};          //初始化          sslContext.init(null, tm, new java.security.SecureRandom());;          //获取SSLSocketFactory对象          SSLSocketFactory ssf=sslContext.getSocketFactory();          URL u=new URL(url);          HttpsURLConnection conn=(HttpsURLConnection)u.openConnection();                  Set keySet = property.keySet();        for (String key : keySet) {             conn.setRequestProperty(key, property.get(key));        }        //设置当前实例使用的SSLSoctetFactory          System.out.println('开始链接');        conn.setSSLSocketFactory(ssf);          conn.connect();          System.out.println('链接成功');                //读取服务器返回的响应头        headerFields = conn.getHeaderFields();            //读取服务器端返回的内容          InputStream is=conn.getInputStream();          InputStreamReader isr=new InputStreamReader(is,'utf-8');          BufferedReader br=new BufferedReader(isr);          buffer=new StringBuffer();          String line=null;          while((line=br.readLine())!=null){              buffer.append(line);          }          }catch(Exception e){              e.printStackTrace();          }        Object[] response = {headerFields, buffer.toString()};                return response;    }

5

另外还有一个put请求以及一个get的img下载请求不再贴出,可以再第六步的全部代码中看到,这里我讲一下https请求和http请求差异的地方,https请求,要先创建ssl套接字安全层,然后将这个安全层套在连接上,之后再进行网络连接请求

6

最后贴一下这个https工具栏的完整的代码:import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.URL;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSocketFactory;import javax.net.ssl.TrustManager;import tool.MyX509TrustManager;/** * 进行Https请求 * @author 枫 * */public class MyHttps {        /**     * 发起Https的get请求     * @param property 请求头参数     * @url 请求的地址     * @return 响应内容[Map>(响应头),String(响应体)]     */    public static Object[] get(String url,LinkedHashMap property) {        Map> headerFields = null;        StringBuffer buffer=null;          try{          //创建SSLContext          SSLContext sslContext=SSLContext.getInstance('TLS');          TrustManager[] tm={new MyX509TrustManager()};          //初始化          sslContext.init(null, tm, new java.security.SecureRandom());;          //获取SSLSocketFactory对象          SSLSocketFactory ssf=sslContext.getSocketFactory();          URL u=new URL(url);          HttpsURLConnection conn=(HttpsURLConnection)u.openConnection();                  Set keySet = property.keySet();        for (String key : keySet) {             conn.setRequestProperty(key, property.get(key));        }        //设置当前实例使用的SSLSoctetFactory          System.out.println('开始链接');        conn.setSSLSocketFactory(ssf);          conn.connect();          System.out.println('链接成功');                //读取服务器返回的响应头        headerFields = conn.getHeaderFields();            //读取服务器端返回的内容          InputStream is=conn.getInputStream();          InputStreamReader isr=new InputStreamReader(is,'utf-8');          BufferedReader br=new BufferedReader(isr);          buffer=new StringBuffer();          String line=null;          while((line=br.readLine())!=null){              buffer.append(line);          }          }catch(Exception e){              e.printStackTrace();          }        Object[] response = {headerFields, buffer.toString()};                return response;    }        /**     * 发起Https的get请求     * @param property 请求头参数     * @param path      * @return      * @url 请求的地址     * @return 响应内容[Map>(响应头),String(响应体)]     */    public static boolean getImg(String url,LinkedHashMap property, String path) {        InputStream is = null;        try {        Map> headerFields = null;        StringBuffer buffer=null;          //创建SSLContext          SSLContext sslContext=SSLContext.getInstance('TLS');          TrustManager[] tm={new MyX509TrustManager()};          //初始化          sslContext.init(null, tm, new java.security.SecureRandom());;          //获取SSLSocketFactory对象          SSLSocketFactory ssf=sslContext.getSocketFactory();          URL u=new URL(url);          HttpsURLConnection conn=(HttpsURLConnection)u.openConnection();                  Set keySet = property.keySet();        for (String key : keySet) {             conn.setRequestProperty(key, property.get(key));        }        //设置当前实例使用的SSLSoctetFactory          System.out.println('开始链接');        conn.setSSLSocketFactory(ssf);              conn.connect();        System.out.println('链接成功');                //读取服务器返回的响应头        headerFields = conn.getHeaderFields();            //读取服务器端返回的内容              is = conn.getInputStream();        } catch (IOException e) {            e.printStackTrace();        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        } catch (KeyManagementException e) {            e.printStackTrace();        }          try {            FileOutputStream out = new FileOutputStream(new File(path));            //文件缓存区         byte[] buffer = new byte[10240000];                int len = 0;                while( (len=is.read(buffer)) != -1 ){                    out.write(buffer, 0, len);                }                out.flush();            out.close();        } catch (IOException e) {            e.printStackTrace();        }        return true;    }        /**     * 发情https的post请求     * @param url 目标地址     * @param property 请求头参数     * @param content 请求内容     * @return 响应内容[Map>(响应头),String(响应体)]     */    public static Object[] post(String url,LinkedHashMap property,String content) {        StringBuffer buffer=null;          Map> headerFields = null;        try{          //创建SSLContext          SSLContext sslContext=SSLContext.getInstance('TLS');          TrustManager[] tm={new MyX509TrustManager()};          //初始化          sslContext.init(null, tm, new java.security.SecureRandom());;          //获取SSLSocketFactory对象          SSLSocketFactory ssf=sslContext.getSocketFactory();          URL u=new URL(url);          HttpsURLConnection conn=(HttpsURLConnection)u.openConnection();          conn.setDoOutput(true);          conn.setDoInput(true);          conn.setUseCaches(false);          conn.setRequestMethod('POST');         Set keySet = property.keySet();        for (String key : keySet) {             conn.setRequestProperty(key, property.get(key));        }        //设置当前实例使用的SSLSoctetFactory          System.out.println('开始链接');        conn.setSSLSocketFactory(ssf);          conn.connect();          DataOutputStream os = new DataOutputStream( conn.getOutputStream() );        os.writeBytes(content);        os.flush();        os.close();        System.out.println('链接成功');        //读取服务器返回的响应头        headerFields  = conn.getHeaderFields();        //读取服务器端返回的内容          InputStream is=conn.getInputStream();          InputStreamReader isr=new InputStreamReader(is,'utf-8');          BufferedReader br=new BufferedReader(isr);          buffer=new StringBuffer();          String line=null;          while((line=br.readLine())!=null){              buffer.append(line);          }          }catch(Exception e){              e.printStackTrace();          }        Object[] response = {headerFields, buffer.toString()};        return response;    }        /**     * 发情https的put请求     * @param url 目标地址     * @param property 请求头参数     * @param content 请求内容     * @return 响应内容[Map>(响应头),String(响应体)]     */    public static Object[] put(String url,LinkedHashMap property,String content) {        StringBuffer buffer=null;          Map> headerFields = null;        try{          //创建SSLContext          SSLContext sslContext=SSLContext.getInstance('TLS');          TrustManager[] tm={new MyX509TrustManager()};          //初始化          sslContext.init(null, tm, new java.security.SecureRandom());;          //获取SSLSocketFactory对象          SSLSocketFactory ssf=sslContext.getSocketFactory();          URL u=new URL(url);          HttpsURLConnection conn=(HttpsURLConnection)u.openConnection();          conn.setDoOutput(true);          conn.setDoInput(true);          conn.setUseCaches(false);          conn.setRequestMethod('PUT');         Set keySet = property.keySet();        for (String key : keySet) {             conn.setRequestProperty(key, property.get(key));        }        //设置当前实例使用的SSLSoctetFactory          System.out.println('开始链接');        conn.setSSLSocketFactory(ssf);          conn.connect();          DataOutputStream os = new DataOutputStream( conn.getOutputStream() );        os.writeBytes(content);        os.flush();        os.close();        System.out.println('链接成功');        //读取服务器返回的响应头        headerFields  = conn.getHeaderFields();        //读取服务器端返回的内容          InputStream is=conn.getInputStream();          InputStreamReader isr=new InputStreamReader(is,'utf-8');          BufferedReader br=new BufferedReader(isr);          buffer=new StringBuffer();          String line=null;          while((line=br.readLine())!=null){              buffer.append(line);          }          }catch(Exception e){              e.printStackTrace();          }        Object[] response = {headerFields, buffer.toString()};        return response;    }}

推荐信息