httpClient相对于java自带的请求功能更加强大,下面就以例子的形式给出:

//HttpClient Get请求
private static void register() {
try {
System.out.println("--------------START---------------");
String url="http://218.17.39.35:8100/acc_accInfo.htm?tkn=E02F67F63771E687504EED1A48A6D194C2A5DD0978F96127944B875E6BE07B95&method=u_accInfo";


HttpClient httpClient = HttpClients.createDefault();
HttpPost get = new HttpPost(url);
get.setHeader("Cookie", "JSESSIONID=8195A9B97D3104D9BE0081A40942DD4E");
HttpResponse response = httpClient.execute(get);

String responseString = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println(responseString);

System.out.println("--------------END---------------");
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* httpClient中的post请求
*
* @param mobile
*
* @Description: httpClient中的post请求
*/
private static void register(String mobile) {
try {
System.out.println("--------------START---------------");

HttpClient client = HttpClients.createDefault();
String url = "http://218.17.39.35:8100/aut_smsCode.hts";
HttpPost post = new HttpPost(url);
post.setHeader("Cookie", "JSESSIONID=1983025ECD57A5E17A1E8352DF67D7A7");

Map<String, String> map = new HashMap<String, String>();
//参数
map.put("mobile", mobile);
//map.put("checkCode", "YUJH");
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
for (Map.Entry<String, String> m : map.entrySet()) {
BasicNameValuePair pair = new BasicNameValuePair(m.getKey(), m.getValue());
params.add(pair);
}
HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");

post.setEntity(entity);
HttpResponse response = client.execute(post);
String responseString = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println(responseString);

System.out.println("--------------END---------------");
} catch (IOException e) {
e.printStackTrace();
}
}

===============================================================================

以下分别是:

1、URLENCODE格式的httpClient post请求

2、json格式的httpClient post请求

3、xml格式的httpClient post请求

/**
* 短连接发送(不进行URLENCODE)
*
* @description httpClient的URLENCODE请求时间
* @param obj 请求对象
* @param httpUrl 请求地址http://114.67.62.211:7901/sms/v2/std/single_send
* @return 请求网关返回的值
* @throws Exception
*/
private String executeNotKeepAliveNotUrlEncodePost(Object obj, String httpUrl) throws Exception
{
String result = String.valueOf("-310099");
HttpClient httpclient = null;
try
{
Class cls = obj.getClass();
Field[] fields = cls.getDeclaredFields();

// 定义变量
String fieldName = null;
String fieldNameUpper = null;
Method getMethod = null;
Object value = null;
String entityValue = "";
//循环拼接请求参数
for (int i = 0; i < fields.length; i++)
{
fieldName = fields[i].getName();
fieldNameUpper = Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
getMethod = cls.getMethod("get" + fieldNameUpper);
value = getMethod.invoke(obj);
if(value != null)
{
//拼接请求参数
entityValue += fieldName + "=" + String.valueOf(value) + "&";
}
}
// 定义请求头
HttpPost httppost = new HttpPost(httpUrl);
httppost.setHeader("Content-Type", "text/x-www-form-urlencoded");

// 去掉最后一个&符号
entityValue = entityValue.substring(0, entityValue.length() - 1);

StringEntity stringEntity = new StringEntity(entityValue, HTTP.UTF_8);

// 设置参数的编码UTF-8
httppost.setEntity(stringEntity);

// 创建连接
httpclient = new DefaultHttpClient();

// 设置请求超时时间 设置为5秒
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, "5 * 1000");
// 设置响应超时时间 设置为60秒
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, "5 * 1000");

HttpEntity entity = null;
HttpResponse httpResponse=null;

try
{
// 向网关请求
httpResponse=httpclient.execute(httppost);
// 若状态码为200,则代表请求成功
if(httpResponse!=null && httpResponse.getStatusLine().getStatusCode()==200)
{
//获取响应的实体
entity=httpResponse.getEntity();
//响应的内容不为空,并且响应的内容长度大于0,则获取响应的内容
if(entity != null && entity.getContentLength() > 0)
{
try
{
//请求成功,能获取到响应内容
result = EntityUtils.toString(entity);
}
catch (Exception e)
{
e.printStackTrace();
//获取内容失败,返回空字符串
result="";
}
}else
{
//请求成功,但是获取不到响应内容
result="";
}
}else
{
// 设置错误码
result = String.valueOf("-310099");
System.out.println("请求失败:"+httpResponse.getStatusLine().toString());
}

}catch (Exception e)
{
result = String.valueOf("-310099");
e.printStackTrace();
}
}
catch (Exception e)
{
result = String.valueOf("-310099");
e.printStackTrace();
}
finally
{
// 关闭连接
if(httpclient != null)
{
try
{
httpclient.getConnectionManager().shutdown();
}
catch (Exception e2)
{
// 关闭连接失败
e2.printStackTrace();
}

}
}
return result;

}


/**
* 短连接发送(进行URLENCODE)
*
* @description
* @param obj 请求对象
* @param httpUrl 请求地址
* @return 请求网关返回的值
* @throws Exception
*/
private String executeNotKeepAlivePost(Object obj, String httpUrl) throws Exception
{
String result = String.valueOf("-310099");
HttpClient httpclient = null;
try
{
Class cls = obj.getClass();
Field[] fields = cls.getDeclaredFields();
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();

// 定义变量
String fieldName = null;
String fieldNameUpper = null;
Method getMethod = null;
Object value = null;
// 设置请求参数
for (int i = 0; i < fields.length; i++)
{
fieldName = fields[i].getName();
fieldNameUpper = Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
getMethod = cls.getMethod("get" + fieldNameUpper);
value = getMethod.invoke(obj);
if(value != null)
{
//拼接请求参数
params.add(new BasicNameValuePair(fieldName, String.valueOf(value)));
}
}
// 定义请求头
HttpPost httppost = new HttpPost(httpUrl);

// 设置参数的编码UTF-8
httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

// 创建连接
httpclient = new DefaultHttpClient();

// 设置请求超时时间 设置为5秒
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, "5 * 1000");
// 设置响应超时时间 设置为60秒
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, "5 * 1000");

HttpEntity entity = null;
HttpResponse httpResponse=null;

try
{
// 向网关请求
httpResponse=httpclient.execute(httppost);
// 若状态码为200,则代表请求成功
if(httpResponse!=null && httpResponse.getStatusLine().getStatusCode()==200)
{
//获取响应的实体
entity=httpResponse.getEntity();
//响应的内容不为空,并且响应的内容长度大于0,则获取响应的内容
if(entity != null && entity.getContentLength() > 0)
{
try
{
//请求成功,能获取到响应内容
result = EntityUtils.toString(entity);
}
catch (Exception e)
{
e.printStackTrace();
//获取内容失败,返回空字符串
result="";
}
}else
{
//请求成功,但是获取不到响应内容
result="";
}
}else
{
// 设置错误码
result = String.valueOf("-310099");
System.out.println("请求失败:"+httpResponse.getStatusLine().toString());
}

}catch (Exception e)
{
result = String.valueOf("-310099");
e.printStackTrace();
}
}
catch (Exception e)
{
result = String.valueOf("-310099");
e.printStackTrace();
}
finally
{
// 关闭连接
if(httpclient != null)
{
try
{
httpclient.getConnectionManager().shutdown();
}
catch (Exception e2)
{
// 关闭连接失败
e2.printStackTrace();
}

}
}
return result;

}

/**
* json格式的httpClient请求
*
* @description 短连接发送(不进行URLENCODE)
* @param obj 请求对象
* @param httpUrl 请求地址
* @return 请求网关返回的值
* @throws Exception
*/
private String executeNotKeepAliveNotUrlEncodePost(Object obj, String httpUrl) throws Exception
{
String result = String.valueOf(ERROR_310099);
HttpClient httpclient = null;
try
{
//将实体对象,生成JSON字符串
String entityValue = gson.toJson(obj);
// 定义请求头
HttpPost httppost = new HttpPost(httpUrl);
httppost.setHeader("Content-Type", "text/json");

StringEntity stringEntity = new StringEntity(entityValue, HTTP.UTF_8);

// 设置参数的编码UTF-8
httppost.setEntity(stringEntity);

// 创建连接
httpclient = new DefaultHttpClient();

// 设置请求超时时间 设置为5秒
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, HTTP_REQUEST_TIMEOUT);
// 设置响应超时时间 设置为60秒
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, HTTP_RESPONSE_TIMEOUT);

HttpEntity entity = null;
HttpResponse httpResponse=null;

try
{
// 向网关请求
httpResponse=httpclient.execute(httppost);
// 若状态码为200,则代表请求成功
if(httpResponse!=null && httpResponse.getStatusLine().getStatusCode()==200)
{
//获取响应的实体
entity=httpResponse.getEntity();
//响应的内容不为空,并且响应的内容长度大于0,则获取响应的内容
if(entity != null)
{
try
{
//请求成功,能获取到响应内容
result = EntityUtils.toString(entity);
}
catch (Exception e)
{
e.printStackTrace();
//获取内容失败,返回空字符串
result="";
}
}else
{
//请求成功,但是获取不到响应内容
result="";
}
}else
{
// 设置错误码
result = String.valueOf(ERROR_310099);
System.out.println("请求失败:"+httpResponse.getStatusLine().toString());
}

}catch (Exception e)
{
result = String.valueOf(ERROR_310099);
e.printStackTrace();
}
}
catch (Exception e)
{
result = String.valueOf(ERROR_310099);
e.printStackTrace();
}
finally
{
// 关闭连接
if(httpclient != null)
{
try
{
httpclient.getConnectionManager().shutdown();
}
catch (Exception e2)
{
// 关闭连接失败
e2.printStackTrace();
}

}
}
return result;

}

/**
* xml格式的httpClient post请求
*
* @description 短连接发送(不进行URLENCODE)
* @param obj 请求对象
* @param httpUrl 请求地址
* @param methodName 方法名
* @return 请求网关返回的值
* @throws Exception
*/
private String executeNotKeepAliveNotUrlEncodePost(Message message, String httpUrl,String methodName) throws Exception
{
String result = String.valueOf(ERROR_310099);
HttpClient httpclient = null;
try
{
//XML请求报文
StringBuffer requestSb=new StringBuffer("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
//发送增加标签
if("template_send".equals(methodName)){
requestSb.append("<mtreq>");
}else if("get_rpt".equals(methodName))
{
//状态报告
requestSb.append("<rptreq>");
}else if("get_balance".equals(methodName))
{
//余额
requestSb.append("<feereq>");
}

//根据是否有值,生成XML报文
// 用户账号
if(message.getUserid()!=null)
{
requestSb.append("<userid>").append(message.getUserid()).append("</userid>");
}
// 用户密码
if(message.getPwd()!=null)
{
requestSb.append("<pwd>").append(message.getPwd()).append("</pwd>");
}
//手机号
if(message.getMobile()!=null)
{
requestSb.append("<mobile>").append(message.getMobile()).append("</mobile>");
}
//短信内容
if(message.getContent()!=null&&!"".equals(message.getContent()))
{
requestSb.append("<content>").append(message.getContent()).append("</content>");
}
//时间戳
if(message.getTimestamp()!=null)
{
requestSb.append("<timestamp>").append(message.getTimestamp()).append("</timestamp>");
}
// 回拨显示的号码
if(message.getExno()!=null)
{
requestSb.append("<exno>").append(message.getExno()).append("</exno>");
}
//用户自定义流水编号
if(message.getCustid()!=null)
{
requestSb.append("<custid>").append(message.getCustid()).append("</custid>");
}
//模板ID
if(message.getTmplid()!=null)
{
requestSb.append("<tmplid>").append(message.getTmplid()).append("</tmplid>");
}
//消息类型
if(message.getMsgtype()!=null)
{
requestSb.append("<msgtype>").append(message.getMsgtype()).append("</msgtype>");
}

//获取状态报告的最大条数
if(message.getRetsize()!=null)
{
requestSb.append("<retsize>").append(message.getRetsize()).append("</retsize>");
}

//发送增加标签
if("template_send".equals(methodName)){
requestSb.append("</mtreq>");
}else if("get_rpt".equals(methodName))
{
//状态报告
requestSb.append("</rptreq>");
}else if("get_balance".equals(methodName))
{
//余额
requestSb.append("</feereq>");
}

String entityValue=requestSb.toString();
// 定义请求头
HttpPost httppost = new HttpPost(httpUrl);
httppost.setHeader("Content-Type", "text/xml");

StringEntity stringEntity = new StringEntity(entityValue, HTTP.UTF_8);

// 设置参数的编码UTF-8
httppost.setEntity(stringEntity);

// 创建连接
httpclient = new DefaultHttpClient();

// 设置请求超时时间 设置为5秒
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, HTTP_REQUEST_TIMEOUT);
// 设置响应超时时间 设置为60秒
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, HTTP_RESPONSE_TIMEOUT);

HttpEntity entity = null;
HttpResponse httpResponse=null;

try
{
// 向网关请求
httpResponse=httpclient.execute(httppost);
// 若状态码为200,则代表请求成功
if(httpResponse!=null && httpResponse.getStatusLine().getStatusCode()==200)
{
//获取响应的实体
entity=httpResponse.getEntity();
//响应的内容不为空,并且响应的内容长度大于0,则获取响应的内容
if(entity != null)
{
try
{
//请求成功,能获取到响应内容
result = EntityUtils.toString(entity);
}
catch (Exception e)
{
e.printStackTrace();
//获取内容失败,返回空字符串
result="";
}
}else
{
//请求成功,但是获取不到响应内容
result="";
}
}else
{
// 设置错误码
result = String.valueOf(ERROR_310099);
System.out.println("请求失败:"+httpResponse.getStatusLine().toString());
}

}catch (Exception e)
{
result = String.valueOf(ERROR_310099);
e.printStackTrace();
}
}
catch (Exception e)
{
result = String.valueOf(ERROR_310099);
e.printStackTrace();
}
finally
{
// 关闭连接
if(httpclient != null)
{
try
{
httpclient.getConnectionManager().shutdown();
}
catch (Exception e2)
{
// 关闭连接失败
e2.printStackTrace();
}

}
}
return result;

}

httpClient 中的post或者get请求的更多相关文章

  1. httpclient 中post请求重定向

    背景:使用httpclient 的post请求进行登录,需要重定向登录,请求重定向后的地址 在httpclient中post请求不像get请求自己可以重定向,实现方式是 判断post请求返回码是否是3 ...

  2. httpClient中的三种超时设置小结

    httpClient中的三种超时设置小结   本文章给大家介绍一下关于Java中httpClient中的三种超时设置小结,希望此教程能给各位朋友带来帮助. ConnectTimeoutExceptio ...

  3. Java中httpClient中三种超时设置

    本文章给大家介绍一下关于Java中httpClient中的三种超时设置小结 在Apache的HttpClient包中,有三个设置超时的地方: /* 从连接池中取连接的超时时间*/ ConnManage ...

  4. spring MVC 管理HttpClient---实现在java中直接向Controller发送请求

    在spring MVC中,大多数时候是由客户端的页面通过ajax等方式向controller发送请求,但有时候需要在java代码中直接向controller发送请求,这时可以使用HttpCilent实 ...

  5. (6)ASP.NET Core 中使用IHttpClientFactory发出HTTP请求

    1.HttpClient类使用存在的问题 HttpClient类的使用所存在的问题,百度搜索的文章一大堆,好多都是单纯文字描述,让人感觉不太好理解,为了更好理解HttpClient使用存在的问题,下面 ...

  6. 接口测试中模拟post四种请求数据

    https://www.jianshu.com/p/3b6d7aa2043a 一.背景介绍 在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟. Fidd ...

  7. HttpClient之Get请求和Post请求示例

    HttpClient之Get请求和Post请求示例 博客分类: Java综合   HttpClient的支持在HTTP/1.1规范中定义的所有的HTTP方法:GET, HEAD, POST, PUT, ...

  8. 小心 HttpClient 中的 FormUrlEncodeContent 的 bug

    小心 HttpClient 中的 FormUrlEncodeContent 的 bug Intro 最近发现活动室预约项目里的上传图片有时候会有问题,周末找时间测试了一下,发现小图片的上传没问题,大图 ...

  9. 如何在Apache HttpClient中设置TLS版本

    1.简介 Apache HttpClient是一个底层.轻量级的客户端HTTP库,用于与HTTP服务器进行通信. 在本教程中,我们将学习如何在使用HttpClient时配置支持的传输层安全(TLS)版 ...

随机推荐

  1. luogu 访问”美术馆“ && 偷天换日

    把这两个题放在一起,是因为这两个题差不多,难度递进其实是懒得写两个博客所以一起分享一下 访问“美术馆” 题目描述 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个 ...

  2. golang 详解defer

    什么是defer defer用来声明一个延迟函数,把这个函数放入到一个调用链表上, 当外部的包含方法return之前,返回参数到调用方法之前调用,也可以说是运行到最外层方法体的"}" ...

  3. 将PPT文件内容转换为图片放在Email邮件正文中发送

    通过Email推送统计报告.一般除了要求将PPT报告文件作为附件发给用户,同时希望将报告内容在邮件中直观展示. 一份统计报告中经常包含柱状图.饼图.好看的图表,这些信息要直接在Email中展示比较复杂 ...

  4. Java 多线程之哪个对象才是锁?

    问题背景 在感觉正常的使用ArrayList的迭代删除的操作的时候,发现了如下的崩溃日志: Caused by: java.util.ConcurrentModificationException a ...

  5. angular路由模块(二)

    上一章写的是如何创建一个简单的路由,这一样我们来看看如何创建一个路由模块.angular的思想就是(模块,组件,子组件.....). 我们在src/app目录下创建一个跟路由模块app-routing ...

  6. loadrunner录制上传文件,但是回放失败

    用Loadrunner录制上传文件,脚本回放时发现,文件没有上传成功,检查脚本发现脚本中没有上传文件的路径. 脚本录制时选择的协议,如果说是socket协议,则不需要上传文件的路径,Loadrunne ...

  7. .Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控

    最近这段时间一直在忙,没时间写博客,负责了一个项目,从前端到后端一直忙,同时还有其他第几个项目的系统架构要处理. 去年就开始关注net core了,只是平时写写demo,没用在项目中,正好这次机会就用 ...

  8. 轮评审用例,写用例的重要性-----(python单元测试反思)

    时间过的真快,3月底了,更新一次博客吧,算是对三月份忙碌的一个总结. 吃过饭,习惯登录qq,看到我群里的一个大神,碎冰发的一个作业 不就是写个代码吗,然后写完再进行测试这个代码是否实现了这个功能. 于 ...

  9. IPFS:Filecoin和复制证明

    这篇文章主要来讲一下Filecoin协议里面的复制证明(Proof of Replication),由于协议涉及到很多概念,可能看起来有点晕乎乎的,小编尽量把复杂问题简单化 ,力求给大家做大普及IPF ...

  10. 1-1 spring基础

    1.spring是一个开源的轻量级的应用开发框架,它提供了IOC(Inversion of Control控制反转)和AOP(Aspect -Oriented Programming 面向切面编程)的 ...