Java使用HttpClient实现Post请求实例

网友投稿 325 2023-06-10


Java使用HttpClient实现Post请求实例

基于项目需求,想要实现Post消息推送,故采用HttpClient组件进行实现,相关代码如下(注:程序采用的httpclient和httpcore依赖包的版本为4.2.5):

import org.apache.http.Header;

import org.apache.http.HttpResponse;

import org.apache.http.HttpStatus;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.params.CoreConnectionPNames;

import java.util.UUID;

import net.sf.json.JSONObject;

import java.nio.charset.Charset;

public static boolean httpPostWithJson(JSONObject jsonObj,String url,String appId){

boolean isSuccess = false;

HttpPost post = null;

try {

HttpClient httpClient = new DefaultHttpClient();

// 设置超时时间

httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 2000);

httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 2000);

post = new HttpPost(url);

// 构造消息头

VXXDz 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 = new StringEntity(jsonObj.toString(), Charset.forName("UTF-8"));

entity.setContentEncoding("UTF-8");

// 发送Json格式的数据请求

entity.setContentType("application/json");

post.setEntity(entity);

HttpResponse response = httpClient.execute(post);

// 检验返回码

int statusCode = resphttp://onse.getStatusLine().getStatusCode();

if(statusCode != HttpStatus.SC_OK){

LogUtil.info("请求出错: "+statusCode);

isSuccess = false;

}else{

int retCode = 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();

}

}

}

return isSuccess;

}

// 构建唯一会话Id

public static String getSessionId(){

UUID uuid = UUID.randomUUID();

String str = uuid.toString();

return str.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依赖包如下:

org.apache.httpcomponents

httpclient

4.4.1

org.apache.httpcomponents

httpcore

4.4.1

随后在网上查找了一翻,找到问题的缘由,原因在于Hadoop集群运行程序时,首先会加载自己相关目录下的jar包,在自己目录下如果未找到,才会加载程序运行时指定的jar包,随查找了Hadoop集群中相关Jar包路径,发现httpclient的相关依赖包为4.2.5,因此将pom.xml配置文件也更新为该版本,程序则运行通过.


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:bootstrap PrintThis打印插件使用详解
下一篇:理解zookeeper选举机制
相关文章

 发表评论

暂时没有评论,来抢沙发吧~