httpClient 中的post或者get请求
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请求的更多相关文章
- httpclient 中post请求重定向
背景:使用httpclient 的post请求进行登录,需要重定向登录,请求重定向后的地址 在httpclient中post请求不像get请求自己可以重定向,实现方式是 判断post请求返回码是否是3 ...
- httpClient中的三种超时设置小结
httpClient中的三种超时设置小结 本文章给大家介绍一下关于Java中httpClient中的三种超时设置小结,希望此教程能给各位朋友带来帮助. ConnectTimeoutExceptio ...
- Java中httpClient中三种超时设置
本文章给大家介绍一下关于Java中httpClient中的三种超时设置小结 在Apache的HttpClient包中,有三个设置超时的地方: /* 从连接池中取连接的超时时间*/ ConnManage ...
- spring MVC 管理HttpClient---实现在java中直接向Controller发送请求
在spring MVC中,大多数时候是由客户端的页面通过ajax等方式向controller发送请求,但有时候需要在java代码中直接向controller发送请求,这时可以使用HttpCilent实 ...
- (6)ASP.NET Core 中使用IHttpClientFactory发出HTTP请求
1.HttpClient类使用存在的问题 HttpClient类的使用所存在的问题,百度搜索的文章一大堆,好多都是单纯文字描述,让人感觉不太好理解,为了更好理解HttpClient使用存在的问题,下面 ...
- 接口测试中模拟post四种请求数据
https://www.jianshu.com/p/3b6d7aa2043a 一.背景介绍 在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟. Fidd ...
- HttpClient之Get请求和Post请求示例
HttpClient之Get请求和Post请求示例 博客分类: Java综合 HttpClient的支持在HTTP/1.1规范中定义的所有的HTTP方法:GET, HEAD, POST, PUT, ...
- 小心 HttpClient 中的 FormUrlEncodeContent 的 bug
小心 HttpClient 中的 FormUrlEncodeContent 的 bug Intro 最近发现活动室预约项目里的上传图片有时候会有问题,周末找时间测试了一下,发现小图片的上传没问题,大图 ...
- 如何在Apache HttpClient中设置TLS版本
1.简介 Apache HttpClient是一个底层.轻量级的客户端HTTP库,用于与HTTP服务器进行通信. 在本教程中,我们将学习如何在使用HttpClient时配置支持的传输层安全(TLS)版 ...
随机推荐
- [BZOJ2684][CEOI2004]锯木厂选址
BZOJ权限题! Description 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能按照一个方向运输:朝山下运 ...
- Luogu3242:[HNOI2015]接水果
题面 Luogu3242 Sol 考虑每个盘子怎样才能接到一个水果 分两种情况: 盘子的\(x, y\)在一条链上,那么水果的两点就要在这条链之外 不在的话,水果的两点就分别在盘子的两点的子树中 记录 ...
- AngularJS中Model和Controller传值问题
最近由于工作原因,开始写点前端的东西.前两天刚开始了解AngularJS这门技术,当然,新手免不了会爬坑! 今天分享一篇关于--> 模型传参给Controller的实例: 需求: 具体是 首先 ...
- openssh/openssl升级到7.4和1.0.2j 源码方式
#!/bin/bashtar -xvf openssh-7.4p1.tar.gztar -xvf openssl-1.0.2j.tar.gz 升级 openssl 到1.0.2jcd openssl- ...
- .Net Remoting使用总结
刚开始接触Remoting的时候,有点排斥,我都使用过webservice,wcf.以及rest.想一想,Remoting是不是过时了?由于公司前辈的缘故,公司的产品用的就是Remoting,那时候w ...
- 【解高次同余方程】51nod1038 X^A Mod P
1038 X^A Mod P 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 X^A mod P = B,其中P为质数.给出P和A B,求< P的所有X. 例如:P = 11 ...
- java web(转)
装载:http://www.oschina.net/question/12_52027 OSCHINA 软件库有一个分类——Web框架,该分类中包含多种编程语言的将近500个项目. Web框架是开发者 ...
- 解决Win10下_findnext()异常
在win10中,使用文件遍历函数_findnext会报0xC0000005错误 ,发生访问冲突错误 错误定位到ntdll.dll 原因: _findnext()第一个参数"路径句柄" ...
- 利用TPC-H为MYSQL生成数据
## 利用TPC-H为MYSQL生成数据 导言 这篇文章是看了joyee写的TPC-H数据导入MySQL教程以及另一篇网上的MySQL TPCH测试工具简要手册 后写的,有些内容是完全转载自以上两篇文 ...
- 关于无法下载android开发工具的解决方法
目前中国内地访问android网站需要FQ.不过这个网站http://www.androiddevtools.cn/提供了所有的和官网上一样的android开发工具和一些其他问题的解决方法.为andr ...