基于项目需求,想要实现Post消息推送,故采用HttpClient组件进行实现,相关代码如下(注:程序采用的httpclient和httpcore依赖包的版本为4.2.5):
代码如下 | 复制代码 |
importorg.apache.http.Header; importorg.apache.http.HttpResponse; importorg.apache.http.HttpStatus; importorg.apache.http.client.HttpClient; importorg.apache.http.client.methods.HttpPost; importorg.apache.http.entity.StringEntity; importorg.apache.http.impl.client.DefaultHttpClient; importorg.apache.http.params.CoreConnectionPNames; importjava.util.UUID; importnet.sf.json.JSONObject; importjava.nio.charset.Charset;
publicstaticbooleanhttpPostWithJson(JSONObject jsonObj,String url,String appId){ booleanisSuccess =false;
HttpPost post =null; try{ HttpClient httpClient =newDefaultHttpClient();
// 设置超时时间 httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,2000); httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,2000);
post =newHttpPost(url); // 构造消息头 post.setHeader("Content-type","application/json; charset=utf-8"); post.setHeader("Connection","Close"); String sessionId = getSessionId(); post.setHeader("SessionId", sessionId); post.setHeader("appid", appid);
// 构建消息实体 StringEntity entity =newStringEntity(jsonObj.toString(), Charset.forName("UTF-8")); entity.setContentEncoding("UTF-8"); // 发送Json格式的数据请求 entity.setContentType("application/json"); post.setEntity(entity);
HttpResponse response = httpClient.execute(post);
// 检验返回码 intstatusCode = response.getStatusLine().getStatusCode(); if(statusCode != HttpStatus.SC_OK){ LogUtil.info("请求出错: "+statusCode); isSuccess =false; }else{ intretCode =0; String sessendId =""; // 返回码中包含retCode及会话Id for(Header header : response.getAllHeaders()){ if(header.getName().equals("retcode")){ retCode = Integer.parseInt(header.getValue()); } if(header.getName().equals("SessionId")){ sessendId = header.getValue(); } }
if(ErrorCodeHelper.IAS_SUCCESS != retCode ){ // 日志打印 LogUtil.info("error return code, sessionId: "sessendId"t"+"retCode: "+retCode); isSuccess =false; }else{ isSuccess =true; } } }catch(Exception e) { e.printStackTrace(); isSuccess =false; }finally{ if(post !=null){ try{ post.releaseConnection(); Thread.sleep(500); }catch(InterruptedException e) { e.printStackTrace(); } } } returnisSuccess; }
// 构建唯一会话Id publicstaticString getSessionId(){ UUID uuid = UUID.randomUUID(); String str = uuid.toString(); returnstr.substring(0,8) + str.substring(9,13) + str.substring(14,18) + str.substring(19,23) + str.substring(24); } |
Ps: 在使用Hadoop集群进行发送POST请求时,遇到"java.lang.NoSuchFieldError: INSTANCE"的问题,此类问题一般是"jar包冲突"的问题所致,但奇怪的是本地的pom.xml设置的依赖包中有该字段,相关的httpclient依赖包如下:
代码如下 | 复制代码 |
|
随后在网上查找了一翻,找到问题的缘由,原因在于Hadoop集群运行程序时,首先会加载自己相关目录下的jar包,在自己目录下如果未找到,才会加载程序运行时指定的jar包,随查找了Hadoop集群中相关Jar包路径,发现httpclient的相关依赖包为4.2.5,因此将pom.xml配置文件也更新为该版本,程序则运行通过.
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级