Java 获取 http 和 https 协议返回的 json 数据
这里有新鲜出炉的 Java 函数式编程, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
本篇文章主要介绍了 Java 获取 http 和 https 协议返回的 json 数据 , 本篇文章提供两个方法, 帮助各位如何获取 http 和 https 返回的数据有兴趣的可以了解一下
现在很多公司都是将数据返回一个 json, 而且很多第三方接口都是返回 json 数据, 而且还需要使用到 http 协议, http 协议是属于为加密的协议, 而 https 协议需要 SSL 证书, https 是将用户返回的信息加密处理, 然而我们要获取这些数据, 就需要引入 SSL 证书现在我提供两个方法, 帮助各位如何获取 http 和 https 返回的数据
获取 http 协议的数据的方法, 如下:
- public static JSONObject httpRequest(String requestUrl, String requestMethod) {
- JSONObject jsonObject = null;
- StringBuffer buffer = new StringBuffer();
- try {
- URL url = new URL(requestUrl);
- // http 协议传输
- HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
- httpUrlConn.setDoOutput(true);
- httpUrlConn.setDoInput(true);
- httpUrlConn.setUseCaches(false);
- // 设置请求方式(GET/POST)
- httpUrlConn.setRequestMethod(requestMethod);
- if ("GET".equalsIgnoreCase(requestMethod)) httpUrlConn.connect();
- // 将返回的输入流转换成字符串
- InputStream inputStream = httpUrlConn.getInputStream();
- InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
- BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
- String str = null;
- while ((str = bufferedReader.readLine()) != null) {
- buffer.append(str);
- }
- bufferedReader.close();
- inputStreamReader.close();
- // 释放资源
- inputStream.close();
- inputStream = null;
- httpUrlConn.disconnect();
- jsonObject = JSONObject.fromObject(buffer.toString());
- } catch(Exception e) {
- e.printStackTrace();
- }
- return jsonObject;
- }
获取 https 协议的数据的方法, 如下:
- public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
- JSONObject jsonObject = null;
- StringBuffer buffer = new StringBuffer();
- try {
- // 创建 SSLContext 对象, 并使用我们指定的信任管理器初始化
- TrustManager[] tm = {
- new MyX509TrustManager()
- };
- SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
- sslContext.init(null, tm, new java.security.SecureRandom());
- // 从上述 SSLContext 对象中得到 SSLSocketFactory 对象
- SSLSocketFactory ssf = sslContext.getSocketFactory();
- URL url = new URL(requestUrl);
- HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
- httpUrlConn.setSSLSocketFactory(ssf);
- httpUrlConn.setDoOutput(true);
- httpUrlConn.setDoInput(true);
- httpUrlConn.setUseCaches(false);
- // 设置请求方式(GET/POST)
- httpUrlConn.setRequestMethod(requestMethod);
- if ("GET".equalsIgnoreCase(requestMethod)) httpUrlConn.connect();
- // 当有数据需要提交时
- if (null != outputStr) {
- OutputStream outputStream = httpUrlConn.getOutputStream();
- // 注意编码格式, 防止中文乱码
- outputStream.write(outputStr.getBytes("UTF-8"));
- outputStream.close();
- }
- // 将返回的输入流转换成字符串
- InputStream inputStream = httpUrlConn.getInputStream();
- InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
- BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
- String str = null;
- while ((str = bufferedReader.readLine()) != null) {
- buffer.append(str);
- }
- bufferedReader.close();
- inputStreamReader.close();
- // 释放资源
- inputStream.close();
- inputStream = null;
- httpUrlConn.disconnect();
- jsonObject = JSONObject.fromObject(buffer.toString());
- } catch(ConnectException ce) {
- log.error("Weixin server connection timed out.");
- } catch(Exception e) {
- log.error("https request error:{}", e);
- }
- return jsonObject;
- }
获取 https 协议的数据和获取 http 协议的区别在于
- // 创建 SSLContext 对象, 并使用我们指定的信任管理器初始化
- TrustManager[] tm = { new MyX509TrustManager() };
- SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
- sslContext.init(null, tm, new java.security.SecureRandom());
- // 从上述 SSLContext 对象中得到 SSLSocketFactory 对象
- SSLSocketFactory ssf = sslContext.getSocketFactory();
- URL url = new URL(requestUrl);
- HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
- httpUrlConn.setSSLSocketFactory(ssf);
大家有更好的方法欢迎留言分享, 以上就是本次共享的内容 还有, 提示一下, 如果复制中, 缺失 jar 包, 请自行下载
来源: http://www.phperz.com/article/18/0209/358833.html