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)版 ...
随机推荐
- Luogu3613 睡觉困难综合征
题面描述https://www.luogu.org/problemnew/show/3613 原题NOI2014起床困难综合症https://www.luogu.org/problemnew/show ...
- [BZOJ4292] [PA2015] Równanie
Description 对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和.现在给定三个正整数k,a,b,请求出满足a<=n<=b且k*f(n)=n的n的个数. Input 第 ...
- 应用canvas绘制动态时钟--每秒自动动态更新时间
使用canvas绘制时钟 下文是部分代码,完整代码参照:https://github.com/lemoncool/canvas-clock,可直接下载. 首先看一下效果图:每隔一秒会动态更新时间 一. ...
- 【Webpack的使用指南 02】Webpack的常用解决方案
说是解决方案实际上更像是webpack的插件索引. 写这一篇的目的是为了形成一个所以,将来要用时直接来查找即可. 索引目录 1.自动构建HTML,可压缩空格,可给引用的js加版本号或随机数:html- ...
- 命令行更新node和npm
Windows系统下: 查看版本的命令和Ubuntu下一样. 不同的是Windows下不能使用"n"包管理器来对NodeJS进行管理,在这里我们使用一种叫"gnvm&qu ...
- Python的Argparse模块是什么?(未完)
近日在阅读代码的过程中遇到了Argparse模块,记得前段时间已经看了,可是过了两周现在又忘了, 看来写代码一定要钻研到底搞清楚其中原委才行,本文主要参考Python3.6系列官方文档 ...
- KeePass使用心得
这几天发现有人说lastpass并不安全,于是发现了KeePass这个软件,其实这个软件很早之前就知道,不过没有使用,下面就说说我找到的关于这个工具的所有总结. KeePass 配合 Firefox ...
- redis五种基本类型CRUD操作
1.String 增:set key1 value1 改:set key1 new-value.自增 incr key1.按照特定值递增:increby key1 inrevalue 删:del ke ...
- Nginx配置ThinkPHP下的url重写(隐藏入口)
搭建好项目后,在网址上输入域名,只能访问首页,其他页面全是404. 在域名后面和控制器前面加上index.php就可以访问. 在tp5官网手册查找后进行配置修改. 打开nginx.conf 后 ,在s ...
- IPFS:世界正在悄然发生变化
世界正在悄然发生变化(IPFS) 2015-05-05 Juan Benet 在自己的终端里面敲入了下面的文字: > echo "hello worlds" | ipfs a ...