Java使用HttpClient实现Post请求实例

发布时间 - 2026-01-10 23:11:05    点击率:

基于项目需求,想要实现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);
    // 构造消息头
    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 = response.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依赖包如下:  

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.4.1</version>
</dependency>
<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpcore</artifactId>
  <version>4.4.1</version>
</dependency>  

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# httpclient  # post请求  # httpclient的post请求  # java  # client  # java使用httpclient 发送请求的示例  # java 11新特性HttpClient主要组件及发送请求示例详解  # Java通过HttpClient进行HTTP请求的代码详解  # java中httpclient封装post请求和get的请求实例  # Java commons-httpclient如果实现get及post请求  # JAVA通过HttpClient发送HTTP请求的方法示例  # java实现HttpClient异步请求资源的方法  # Java高并发场景下的 HttpClient请求优化实现  # 找了  # 的是  # 加载  # 目录下  # 才会  # 中有  # 此类  # 配置文件  # 大家多多  # 为该  # 未找到  # 在网上  # false  # isSuccess  # post  # getParams  # setParameter  # null 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: EditPlus中的正则表达式 实战(2)  如何用免费手机建站系统零基础打造专业网站?  Laravel怎么判断请求类型_Laravel Request isMethod用法  jquery插件bootstrapValidator表单验证详解  如何生成腾讯云建站专用兑换码?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  魔方云NAT建站如何实现端口转发?  JavaScript如何实现路由_前端路由原理是什么  浅析上传头像示例及其注意事项  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  如何在云虚拟主机上快速搭建个人网站?  制作企业网站建设方案,怎样建设一个公司网站?  如何快速搭建高效可靠的建站解决方案?  Python文件操作最佳实践_稳定性说明【指导】  javascript基本数据类型及类型检测常用方法小结  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  如何在 React 中条件性地遍历数组并渲染元素  电商网站制作价格怎么算,网上拍卖流程以及规则?  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel如何配置和使用缓存?(Redis代码示例)  JS经典正则表达式笔试题汇总  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  制作电商网页,电商供应链怎么做?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  javascript中的try catch异常捕获机制用法分析  JavaScript如何实现音频处理_Web Audio API如何工作?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何在局域网内绑定自建网站域名?  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  魔毅自助建站系统:模板定制与SEO优化一键生成指南  Laravel如何处理表单验证?(Requests代码示例)  JavaScript如何实现错误处理_try...catch如何捕获异常?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Python3.6正式版新特性预览  网站制作大概多少钱一个,做一个平台网站大概多少钱?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  java获取注册ip实例  Python文件异常处理策略_健壮性说明【指导】  Laravel如何处理异常和错误?(Handler示例)  网站制作价目表怎么做,珍爱网婚介费用多少?  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  网站制作软件免费下载安装,有哪些免费下载的软件网站?  如何在阿里云香港服务器快速搭建网站?  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Python文件流缓冲机制_IO性能解析【教程】  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  如何用AWS免费套餐快速搭建高效网站?