package com.jfbank.loan.intf.util;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import ms.platform.base.log.MSLog;

import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.http.protocol.HTTP;

public class HttpClientUtil {

private static HttpClientUtil clientUtil ;

private static CloseableHttpClient httpClient = null;

static {
//
httpClient = HttpClients.createDefault();
//
clientUtil = new HttpClientUtil();
}

private int status = 0;

/**
* 私有化构造方法
*/
private HttpClientUtil() {

}

/**
* 获取当前对象,单例对象
* @return
*/
public static HttpClientUtil getInstance() {

return clientUtil;
}

/**
* POST提交
* @param strUrl 请求URL
* @param strJson 请求json字符串
* @return
*/
public String postJson(String strUrl,String strJson) {

String body = null;
if (strJson != null && !"".equals(strJson.trim())) {

try {
//实体
StringEntity entity = new StringEntity(strJson.toString(),"utf-8");
//post
HttpPost postMethod = new HttpPost(strUrl);
postMethod.setEntity(entity);

long startTime = System.currentTimeMillis();

//响应
CloseableHttpResponse response = httpClient.execute(postMethod);
long endTime = System.currentTimeMillis();
int statusCode = response.getStatusLine().getStatusCode();

MSLog.info("statusCode:" + statusCode);
MSLog.info("调用API 花费时间(单位:毫秒):" + (endTime - startTime));

if (statusCode != HttpStatus.SC_OK) {
MSLog.error("Method failed:" + response.getStatusLine());
status = 1;
}

// Read the response body
body = EntityUtils.toString(response.getEntity());

} catch (IOException e) {
// 发生网络异常
MSLog.error("exception occurred:",e);
// 网络错误
status = 3;
} finally {
MSLog.info("调用接口状态:" + status);
}
}

return body;
}

/**
* POST提交
* @param strUrl 请求URL
* @param strJson 请求json字符串
* @return
*/
public String postMap(String strUrl,Map<Object, Object> paraMap) {

String body = null;

if (paraMap != null && paraMap.size() > 0) {

try {

/** 设置请求参数 */
//实体
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
//赋值
for (Object key : paraMap.keySet()) {
nvps.add(new BasicNameValuePair(key.toString(), (String)paraMap.get(key)));
}

//post
HttpPost postMethod = new HttpPost(strUrl);
postMethod.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
//请求时间
long startTime = System.currentTimeMillis();
//响应
CloseableHttpResponse response = httpClient.execute(postMethod);
long endTime = System.currentTimeMillis();
int statusCode = response.getStatusLine().getStatusCode();

MSLog.info("statusCode:" + statusCode);
MSLog.info("调用API 花费时间(单位:毫秒):" + (endTime - startTime));

if (statusCode != HttpStatus.SC_OK) {
MSLog.error("Method failed:" + response.getStatusLine());
status = 1;
}
// Read the response body
body = EntityUtils.toString(response.getEntity());

} catch (IOException e) {
// 发生网络异常
MSLog.error("exception occurred:",e);
// 网络错误
status = 3;
} catch (Exception e) {
e.printStackTrace();
} finally {
MSLog.info("调用接口状态:" + status);
}
}

return body;
}

}

java post请求的更多相关文章

  1. Java HTTP请求

    注意:java  http请求要放在 try catch里面,该过程是一个阻塞过程,所以需要新建一个线程进行处理 try { HttpPost request = new HttpPost(URL); ...

  2. java读取请求中body数据

    java读取请求中body数据 /** * 获取request中body数据 * * @author lifq * * 2017年2月24日 下午2:29:06 * @throws IOExcepti ...

  3. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  4. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求   Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java ...

  5. 解决Fiddler不能监听Java HttpURLConnection请求的方法

    在默认情况下,Fiddler不能监听Java HttpURLConnection请求.究其原因,Java的网络通信协议栈可能浏览器的通信协议栈略有区别,Fiddler监听Http请求的原理是 在应用程 ...

  6. 使用Fiddler监听java HttpURLConnection请求

    使用Fiddler监听java HttpURLConnection请求

  7. java判断请求是否ajax异步请求

    java判断请求是否ajax异步请求   解决方法: if (request.getHeader("x-requested-with") != null && re ...

  8. kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件

    小菜利用工作之余编写了一款Java小插件,主要是用来验证Web请求的数据,是在服务器端进行验证,不是简单的浏览器端验证. 小菜编写的仅仅是一款非常初级的组件而已,但小菜为它写了详细的说明文档. 简单介 ...

  9. Java 监控请求

    监控对象 import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Map.Ent ...

随机推荐

  1. 【Android测试】【随笔】获得App的包名和启动页Activity

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5157308.html 前言 经常看到一些刚刚接触Andro ...

  2. Ubuntu 设置Vim tab为四个空格

    使用root权限打开 /etc/vim/vimrc 添加下列配置 set tabstop= set softtabstop= set shiftwidth= set noexpandtab set n ...

  3. C# 字符串的截取和替换

    1.取字符串的前n个字符 (1)string str1=str.Substring(0,n); (2)string str1=str.Remove(i,str.Length-n); 2.去掉字符串的前 ...

  4. Linux下对各种压缩文件处理

    Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲ta ...

  5. Oracle数据导入导出imp/exp

    功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失). Oracle有个好处,虽然你的电 ...

  6. python echo服务器和客户端(客户端可以用telnet之类的)

    发上来记录一下,省得下次再写一遍 服务器:server.py #-*- coding:utf-8 -*- from SocketServer import TCPServer, BaseRequest ...

  7. Swift-09-可空链式调用(Optional Chaining)

    我对这个的理解就是:我们有可能会用到其他的属性或者方法,当我们在使用其他的时候,可以使用点语法去访问另一个的属性,这样的使用,就形成了链式访问. 可空链式调用是一种可以请求和调用属性.方法及下表的过程 ...

  8. 【转】如何使用Android Studio把自己的Android library分发到jCenter和Maven Central

    转自:http://www.devtf.cn/?p=760&utm_source=tuicool 如何使用Android Studio把自己的Android library分发到jCenter ...

  9. 针对应用程序池“xxxxxx”的模板永久性缓存初始化失败,解决方法

    日志名称:          Application 来源:            Active Server Pages 日期:            2014-11-22 9:09:39 事件 I ...

  10. Calculating simple running totals in SQL Server

    Running total for Oracle: SELECT somedate, somevalue,SUM(somevalue) OVER(ORDER BY somedate ROWS BETW ...