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)版 ...
随机推荐
- 【Spring源码分析】非懒加载的单例Bean初始化前后的一些操作
前言 之前两篇文章[Spring源码分析]非懒加载的单例Bean初始化过程(上篇)和[Spring源码分析]非懒加载的单例Bean初始化过程(下篇)比较详细地分析了非懒加载的单例Bean的初始化过程, ...
- Bounding-box 回归
R-CNN系列均训练了Bounding-box回归器来对窗口进行校正,其目标是学习一种转换关系将预测得到的窗口P映射为真实窗口G(Ground truth). 变换方式 可以通过简单的仿射变换以及指数 ...
- LINUX下解决TIME_WAIT等网络问题
修改配置文件 /etc/sysctl.conf net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_timeout ...
- Java高并发秒杀系统【观后总结】
项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番. 记录在该项目中学到了什么玩意.. 该项目源码对应的gitHub地址(由观看其视频的人编写,并 ...
- 灵感&小思路
1.被处理的数据量级比较大.没有明显规律可循,可以分割.或者提取文件,采用分步和保存思想去解决. 比如在使用python的正则re模块时候,根据被处理对象提取属性抽象一个基类,方法实现分步,并且把中间 ...
- 没有基础的初学者学java怎样快速入门?超全的学习路线图
现在地球人都知道互联网行业工资高,上万都是小case,不值一提.可是对于大部分人来说,工资七八千都算很难了.那我也想学java,当程序员,赚大钱.可是作为一个初学者,怎样才可以快速入门呢?早点入门就可 ...
- win8.1下无法运行vc++6.0的解决方法
参考网址: http://wenku.baidu.com/link?url=A6mzeCDLNW1vCV7Vm5p83jqSzguiOFlH5FX-7kdN9NJXS_ORXYuaVDn1Prnz_F ...
- 在Simplicity Studio下创建适用于EFR32的工程项目
1.使用平台 使用平台描述了在Simplicity Stdio下创建工程时所使用的操作系统与软件版本等. 操作系统:Windows 10 Simplcity Studio版本:Simlicity St ...
- 记录使用CI框架开发项目时遇到的问题
关于CI框架在视图文件中怎样引入静态资源文件(js,css,images)的问题: 第一步:在application/config/config.php文件中配置 $config['base_url ...
- @Controller 类中初始化问题解决办法
在Controller类中常常遇到有些参数需要初始化,甚至有些只允许初始化一次,而Controller类不像servelet类可以调用init()函数进行初始化,这里想到的办法是设置标记值,让初始化部 ...