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);
        // 构造消息头
        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包(具体参见:http://bbs.umeng.com/thread-12187-1-1.html),随查找了Hadoop集群中相关Jar包路径,发现httpclient的相关依赖包为4.2.5,因此将pom.xml配置文件也更新为该版本,程序则运行通过.

时间: 2024-10-13 16:12:18

Java使用HttpClient实现Post请求的相关文章

JAVA利用HttpClient进行POST请求(HTTPS)

目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用jQuery post进行请求. 但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的post请求是不允许跨域的. 这时,就只能够用HttpClient包进行请求了,同时由于请求的URL是HTTPS的,为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程. 1.写一个SSLClient类,继承至HttpClient [java] view plain c

Java Http GET POST发送请求

Java Http GET POST发送请求 本文写了1个java 发送GET请求以及2个java 发送POST请求,新手,不喜勿喷! 背景: 这是一个使用魔宝支付的demo,首先需要移动端提交商城订单,请求平台签名接口进行签名并获取支付所需要的要素,对支付公司返回的信息验签后返回移动端这些要素,移动端启动支付公司SDK进行支付交易,后续还有接收交易结果通知消息. 说明 GET核心:CloseableHttpClient和CloseableHttpResponse,HttpGet POST核心:

【Stackoverflow问题精选】如何使用java.net.URLConnection收发HTTP请求

问题 如何使用java.net.URLConnection收发HTTP请求呢?处理Http请求,有哪些最佳实践? 讨论: 精华回答 首先声明,下面的代码,都是基本的例子.更严谨的话,还应加入处理各种异常的代码(如IOExceptions.NullPointerException.ArrayIndexOutOfBoundsException) 准备 首先,需要设置请求的URL以及charset(编码):另外还需要哪些参数,则取决于各自url的要求. String url = "http://exa

Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4006009.html 联系方式:[email protected] [系列]Android系列之网络:(持续更新) Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) Android系列之网络(二)----HTTP请求头与响应头 Android

android使用apache httpclient发送post请求

package com.liuc; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.ht

Java中httpClient中三种超时设置

本文章给大家介绍一下关于Java中httpClient中的三种超时设置小结 在Apache的HttpClient包中,有三个设置超时的地方: /* 从连接池中取连接的超时时间*/ ConnManagerParams.setTimeout(params, 1000); /*连接超时*/ HttpConnectionParams.setConnectionTimeout(params, 2000); /*请求超时*/ HttpConnectionParams.setSoTimeout(params,

使用httpclient发送http请求

先来个httpclient的maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3</version> </dependency> SimpleHttpClient.java package com.openapi.TestPojo; im

org.apache.http.client.HttpClient get/post请求

请求步骤 1.创建httpclient 对象 2.创建 请求方式,构造函数的值为请求路径 3.调用1中对象的execute() 方法,参数为 2 的对象 4.获取请求响应数据 5.释放连接资源 6.处理数据 一.使用org.apache.http.client.HttpClient 的get请求来实现 1.请求核心代码: // 创建 httpclient 对象       HttpClient httpclient = new DefaultHttpClient();    //创建请求方式,因

Java通过httpclient获取cookie模拟登录

package Step1; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.httpc