java公众平台通用接口工具类HttpConnectUtil实例代码

实例如下:

package com.common.util;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.common.weixin.access.util.MyX509TrustManager;

/**
 * 公众平台通用接口工具类
 *
 * @author
 * @date 2013-08-09
 */
public class HttpConnectUtil {
private static Logger log = LoggerFactory.getLogger(HttpConnectUtil.class);

/**
* 发起https请求并获取结果
*
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
*/
public static String httpRequest(String requestUrl, String requestMethod, String outputStr) {
String result = null;
StringBuffer buffer = new StringBuffer();
try {
URL url = new URL(requestUrl);
HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
// 设置通用的请求属性
httpUrlConn.setRequestProperty("accept", "*/*");
httpUrlConn.setRequestProperty("connection", "Keep-Alive");
httpUrlConn.setRequestProperty("Charset", "utf-8");

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();
result = buffer.toString();
//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 result;
}
/**
* 发起https请求并获取结果
*
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
* @return 结果字符串
*/
public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) throws Exception{
String result = 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.setRequestProperty("accept", "*/*");
httpUrlConn.setRequestProperty("connection", "Keep-Alive");
httpUrlConn.setRequestProperty("Charset", "utf-8");
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();
result = buffer.toString();
//jsonObject = JSONObject.fromObject(buffer.toString());
} catch (ConnectException ce) {
log.error(requestUrl + " server connection timed out.");
throw new Exception("连接服务器超时");
} catch (Exception e) {
log.error(requestUrl +" https request error:{}", e);
throw new Exception("HTTPS请求错误");
}
return result;
}
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}

以上这篇java公众平台通用接口工具类HttpConnectUtil实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java实现http请求工具类示例

    通过http rest请求返回数据 复制代码 代码如下: import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import

  • java公众平台通用接口工具类HttpConnectUtil实例代码

    实例如下: package com.common.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; import

  • 基于Java实现进制转换工具类的示例代码

    目录 背景 原理 十进制A转换为N进制R N进制R转换为十进制A 应用 延伸 背景 最近有个发送短信的功能,需要在短信中带有详情链接,链接中带有对应信息且要有校验功能,然而短信是按字数收费的,所以链接要尽可能的短.链接中带有数字类型参数,就想到通过低进制转高进制可以减少参数长度. 原理 低进制转换到高进制的时候可能会减少位数,例如二进制是满二进一,十进制是满十进一. 二进制:101001101 转换为对应的四进制为:11031 转换为对应的八进制为:515 转换为对应的十进制为:333 转换为对

  • Java8优雅的字符串拼接工具类StringJoiner实例代码

    StringJoiner是Java8新出的用于处理字符串拼接的工具类,可以让你的代码看起来更优雅,不拉跨. 假设现在遍历一个字符串集合,需求是每个元素按照 "." 分开. String a = "w", b = "d", c = "n", d = "m", e = "d"; List<String> list = new ArrayList<>(); list.a

  • java关闭流连接IO工具类

    本文实例为大家分享了java关闭流连接IO工具类的具体代码,供大家参考,具体内容如下 package com.demo.utils; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; /** * 关闭流连接IO工具类 * @author dongyangyang * @Date 2016

  • java数据库唯一id生成工具类

    本文实例为大家分享了java数据库唯一id生成工具类的具体代码,供大家参考,具体内容如下 import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import java.util.Random; import java.util.UUID; import org.springframework.dao.EmptyResultDataAccessExce

  • java实现随机抽取奖品工具类

    本文实例为大家分享了java实现随机抽取奖品工具类的具体代码,供大家参考,具体内容如下 随机抽取奖品 整体思路: 1.奖品集合 + 概率比例集合 2.将奖品按集合中的顺序概率计算成所占比例区间,放入比例集合.并产生一个随机数加入其中,进行排序. 3.排序后随机数落在那个区间就表示那个区间的奖品被抽中. 4.返回的随机数在集合中的索引,该索引就是奖品集合的中的索引. 5.比例区间的计算通过概率相加获得. //奖品的实体类 public class Gift { private String id;

  • java金额数字转中文工具类详解

    本文实例为大家分享了java金额数字转中文工具类的具体代码,供大家参考,具体内容如下 java金额数字转中文工具类ConvertNum.java package light.mvc.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * 金额数字转中文工具类 * * @author ardo * */ public class Convert

  • java版微信公众平台消息接口应用示例

    本文实例讲述了java版微信公众平台消息接口应用方法.分享给大家供大家参考,具体如下: 微信公众平台现在推出自动回复消息接口,但是由于是接口内容用的是PHP语言写的,很多地方操作起来让本人这个对Java比较熟悉的小伙很别扭,所以仿照PHP的接口代码做了一套jsp语言编写的接口. 首先先把整个接口代码贴出来做下比较,然后我们再分析代码: PHP: <?php /** * wechat php test */ //define your token define("TOKEN", &

  • Java常用类库Apache Commons工具类说明及使用实例详解

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. Con

  • 微信公众平台消息接口校验与消息接口响应实例

    本文实例讲述了微信公众平台消息接口校验与消息接口响应的方法.分享给大家供大家参考.具体分析如下: 开发微信公众平台消息接口过程中,我们首先需要验证消息接口的有效性,验证通过后,才可以进行其他开发,首先我们来看一下微信公众平台给我的 PHP SDK. 1.需要设置一个 TOKEN 信息,代码如下: 复制代码 代码如下: efine("TOKEN", "weixin"); 这个 TOKEN 信息可以由开发者自行设定. 2.有个 wechatCallbackapiTest

随机推荐