欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用HttpClient實(shí)現(xiàn)Post請(qǐng)求實(shí)例

 更新時(shí)間:2017年02月20日 16:45:52   作者:mengrennwpu  
本篇文章主要介紹了Java使用HttpClient實(shí)現(xiàn)Post請(qǐng)求實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

基于項(xiàng)目需求,想要實(shí)現(xiàn)Post消息推送,故采用HttpClient組件進(jìn)行實(shí)現(xiàn),相關(guān)代碼如下(注:程序采用的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();

    // 設(shè)置超時(shí)時(shí)間
    httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 2000);
    httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 2000);
      
    post = new HttpPost(url);
    // 構(gòu)造消息頭
    post.setHeader("Content-type", "application/json; charset=utf-8");
    post.setHeader("Connection", "Close");
    String sessionId = getSessionId();
    post.setHeader("SessionId", sessionId);
    post.setHeader("appid", appid);
          
    // 構(gòu)建消息實(shí)體
    StringEntity entity = new StringEntity(jsonObj.toString(), Charset.forName("UTF-8"));
    entity.setContentEncoding("UTF-8");
    // 發(fā)送Json格式的數(shù)據(jù)請(qǐng)求
    entity.setContentType("application/json");
    post.setEntity(entity);
      
    HttpResponse response = httpClient.execute(post);
      
    // 檢驗(yàn)返回碼
    int statusCode = response.getStatusLine().getStatusCode();
    if(statusCode != HttpStatus.SC_OK){
      LogUtil.info("請(qǐng)求出錯(cuò): "+statusCode);
      isSuccess = false;
    }else{
      int retCode = 0;
      String sessendId = "";
      // 返回碼中包含retCode及會(huì)話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;
}

// 構(gòu)建唯一會(huì)話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集群進(jìn)行發(fā)送POST請(qǐng)求時(shí),遇到"java.lang.NoSuchFieldError: INSTANCE"的問題,此類問題一般是"jar包沖突"的問題所致,但奇怪的是本地的pom.xml設(shè)置的依賴包中有該字段,相關(guān)的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>  

隨后在網(wǎng)上查找了一翻,找到問題的緣由,原因在于Hadoop集群運(yùn)行程序時(shí),首先會(huì)加載自己相關(guān)目錄下的jar包,在自己目錄下如果未找到,才會(huì)加載程序運(yùn)行時(shí)指定的jar包,隨查找了Hadoop集群中相關(guān)Jar包路徑,發(fā)現(xiàn)httpclient的相關(guān)依賴包為4.2.5,因此將pom.xml配置文件也更新為該版本,程序則運(yùn)行通過.

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring中的事務(wù)管理及實(shí)現(xiàn)方式解析

    Spring中的事務(wù)管理及實(shí)現(xiàn)方式解析

    這篇文章主要介紹了Spring中的事務(wù)管理及實(shí)現(xiàn)方式解析,Spring事務(wù)管理基于底層數(shù)據(jù)庫本身的事務(wù)處理機(jī)制,數(shù)據(jù)庫事務(wù)的基礎(chǔ),是掌握Spring事務(wù)管理的基礎(chǔ),這篇總結(jié)下Spring事務(wù),需要的朋友可以參考下
    2024-01-01
  • Java 高并發(fā)七:并發(fā)設(shè)計(jì)模型詳解

    Java 高并發(fā)七:并發(fā)設(shè)計(jì)模型詳解

    本文主要介紹Java高并發(fā) 并發(fā)設(shè)計(jì)模型的知識(shí),這里主要講解 1. 什么是設(shè)計(jì)模式 2. 單例模式 3. 不變模式 4. Future模式 5. 生產(chǎn)者消費(fèi)者,有需要的小伙伴可以參考下
    2016-09-09
  • Java中的==使用方法詳解

    Java中的==使用方法詳解

    這篇文章主要介紹了Java中“==”的使用方法,,==可以使用在基本數(shù)據(jù)類型變量和引用數(shù)據(jù)類型變量中,equals()是方法,只能用于引用數(shù)據(jù)類型,需要的朋友可以參考下
    2022-09-09
  • Java9新特性中的模塊化詳解

    Java9新特性中的模塊化詳解

    今天介紹一個(gè)Java?9的功能,模塊化(Modular),這可能使Java有史以來最大的Feature,對(duì)Java9模塊化相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-03-03
  • Spring框架 XML配置事務(wù)控制的步驟操作

    Spring框架 XML配置事務(wù)控制的步驟操作

    這篇文章主要介紹了Spring框架 XML配置事務(wù)控制的步驟操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java synchronized與CAS使用方式詳解

    Java synchronized與CAS使用方式詳解

    提到Java的知識(shí)點(diǎn)一定會(huì)有多線程,JDK版本不斷的更迭很多新的概念和方法也都響應(yīng)提出,但是多線程和線程安全一直是一個(gè)重要的關(guān)注點(diǎn)。比如說我們一入門就學(xué)習(xí)的synchronized怎么個(gè)實(shí)現(xiàn)和原理,還有總是被提到的CAS是啥,他和synchronized關(guān)系是啥?請(qǐng)往下看
    2023-01-01
  • SpringCloud gateway跨域配置的操作

    SpringCloud gateway跨域配置的操作

    這篇文章主要介紹了SpringCloud gateway跨域配置的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 解析ConcurrentHashMap:成員屬性、內(nèi)部類、構(gòu)造方法

    解析ConcurrentHashMap:成員屬性、內(nèi)部類、構(gòu)造方法

    ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成。Segment的結(jié)構(gòu)和HashMap類似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見問題---ConcurrentHashMap知識(shí),一起看看吧
    2021-06-06
  • spring強(qiáng)行注入和引用實(shí)例解析

    spring強(qiáng)行注入和引用實(shí)例解析

    這篇文章主要介紹了spring強(qiáng)行注入和引用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java中的Semaphore源碼分析

    Java中的Semaphore源碼分析

    這篇文章主要介紹了Java中的Semaphore源碼分析,Semaphore是一個(gè)訪問公共資源的線程數(shù)量如限流、停車等,它是一個(gè)基于AQS實(shí)現(xiàn)的共享鎖,主要是通過控制state變量來實(shí)現(xiàn),需要的朋友可以參考下
    2023-11-11

最新評(píng)論