java HttpClientUtil帮助类
自己写的java模拟请求帮助类,已经包含header头构造,会话session维持
package com.haozl.back.util; import java.io.File; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.params.ClientPNames; import org.apache.http.client.params.CookiePolicy; import org.apache.http.entity.StringEntity; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.HttpConnectionParams; import org.apache.http.util.EntityUtils; public class HttpClientUtil { private String TextEncoding = "gb2312"; private String ResultEncoding="utf-8";//返回的网页结果编码 private Map<String, String> headers; private String SessionId; private boolean SessionIdFlag;//首次是否需要获取Sessionid public HttpClientUtil(){ } public HttpClientUtil(Map<String, String> headers){ this.headers=headers; } /** * 会话维持 * @param headers * @param sessionId */ public HttpClientUtil(Map<String, String> headers, String sessionId) { this.headers = headers; this.SessionId = sessionId; this.headers.put("Cookie", this.SessionId); this.SessionIdFlag=false;//第二次请求不需要记录SessionId } /** * 发送post请求 * 异常或者没拿到返回结果的情况下,result为"" */ public String httpPost(String url, Map<String, String> param) { DefaultHttpClient httpclient = null; HttpPost httpPost = null; HttpResponse response = null; HttpEntity entity = null; String result = ""; StringBuffer sb = new StringBuffer(); try { httpclient = new DefaultHttpClient(); //设置cookie的兼容性---考虑是否需要 httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY); httpPost = new HttpPost(url); //设置各种头信息 ) { for (Entry<String, String> entry : headers.entrySet()) { httpPost.setHeader(entry.getKey(), entry.getValue()); } } //传入各种参数 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); if (param != null) { String key=null, value=null; for (Entry<String, String> set : param.entrySet()) { key = set.getKey(); value = set.getValue() == null ? "" : set.getValue(); nvps.add(new BasicNameValuePair(key, value)); sb.append(" [" + key + "-" + value + "] "); } } httpPost.setEntity(new UrlEncodedFormEntity(nvps, this.TextEncoding)); //设置连接超时时间 HttpConnectionParams.setConnectionTimeout(httpPost.getParams(), ); //设置读数据超时时间 HttpConnectionParams.setSoTimeout(httpPost.getParams(), ); //开始进行请求 response = httpclient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) {//请求不成功 System.out.println("HttpStatus ERROR" + "Method failed: " + response.getStatusLine()); return "error"; } entity = response.getEntity(); if (null != entity) { byte[] bytes = EntityUtils.toByteArray(entity); result = new String(bytes, this.TextEncoding); } else { result = ""; } if(this.SessionIdFlag==true){ //获取SessionId String cookieValue=response.getFirstHeader("Set-Cookie").getValue(); , cookieValue.indexOf(";")); } } catch (Exception e) { //e.printStackTrace(); } finally { if (null != httpclient) { httpclient.getConnectionManager().shutdown(); } } return result; } /** * 发送post请求 * 异常或者没拿到返回结果的情况下,result为"" */ public String httpPost2(String url, Map<String, String[]> param) { DefaultHttpClient httpclient = null; HttpPost httpPost = null; HttpResponse response = null; HttpEntity entity = null; String result = ""; StringBuffer sb = new StringBuffer(); try { httpclient = new DefaultHttpClient(); //设置cookie的兼容性---考虑是否需要 httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY); httpPost = new HttpPost(url); //设置各种头信息 ) { for (Entry<String, String> entry : headers.entrySet()) { httpPost.setHeader(entry.getKey(), entry.getValue()); } } //传入各种参数 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); if (param != null) { String key=null; for (Entry<String, String[]> set : param.entrySet()) { key = set.getKey(); if(set.getValue()==null){ nvps.add(new BasicNameValuePair(key, "")); sb.append(" [" + key + "-" + "" + "] "); }else{ for(String val : set.getValue()){ val=val==null ? "" : val; nvps.add(new BasicNameValuePair(key, val)); sb.append(" [" + key + "-" + val + "] "); } } } } httpPost.setEntity(new UrlEncodedFormEntity(nvps, this.TextEncoding)); //设置连接超时时间 HttpConnectionParams.setConnectionTimeout(httpPost.getParams(), ); //设置读数据超时时间 HttpConnectionParams.setSoTimeout(httpPost.getParams(), ); //开始进行请求 response = httpclient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) {//请求不成功 System.out.println("HttpStatus ERROR" + "Method failed: " + response.getStatusLine()); return "error"; } entity = response.getEntity(); if (null != entity) { byte[] bytes = EntityUtils.toByteArray(entity); result = new String(bytes, this.TextEncoding); } else { result = ""; } if(this.SessionIdFlag==true){ //获取SessionId String cookieValue=response.getFirstHeader("Set-Cookie").getValue(); , cookieValue.indexOf(";")); } } catch (Exception e) { //e.printStackTrace(); } finally { if (null != httpclient) { httpclient.getConnectionManager().shutdown(); } } return result; } /** * 发送post请求 * 异常或者没拿到返回结果的情况下,result为"" */ public String httpPost3(String url, String param) { DefaultHttpClient httpclient = null; HttpPost httpPost = null; HttpResponse response = null; HttpEntity entity = null; String result = ""; //StringBuffer sb = new StringBuffer(); try { httpclient = new DefaultHttpClient(); //设置cookie的兼容性---考虑是否需要 httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY); httpPost = new HttpPost(url); //设置各种头信息 ) { for (Entry<String, String> entry : headers.entrySet()) { httpPost.setHeader(entry.getKey(), entry.getValue()); } } //传入各种参数 /* List<NameValuePair> nvps = new ArrayList<NameValuePair>(); if (param != null) { for (Entry<String, String[]> set : param.entrySet()) { String key = set.getKey(); if(set.getValue()==null){ nvps.add(new BasicNameValuePair(key, "")); sb.append(" [" + key + "-" + "" + "] "); }else{ for(String val : set.getValue()){ val=val==null ? "" : val; nvps.add(new BasicNameValuePair(key, val)); sb.append(" [" + key + "-" + val + "] "); } } } } httpPost.setEntity(new UrlEncodedFormEntity(nvps, this.TextEncoding)); */ // 构造最简单的字符串数据 StringEntity reqeustEntity = new StringEntity(param,this.TextEncoding); // 设置类型 //reqEntity.setContentType("application/x-www-form-urlencoded"); // 设置请求的数据 httpPost.setEntity(reqeustEntity); //设置连接超时时间 HttpConnectionParams.setConnectionTimeout(httpPost.getParams(), ); //设置读数据超时时间 HttpConnectionParams.setSoTimeout(httpPost.getParams(), ); //开始进行请求 response = httpclient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) {//请求不成功 System.out.println("HttpStatus ERROR" + "Method failed: " + response.getStatusLine()); return "error"; } entity = response.getEntity(); if (null != entity) { byte[] bytes = EntityUtils.toByteArray(entity); result = new String(bytes, this.TextEncoding); } else { result = ""; } if(this.SessionIdFlag==true){ //获取SessionId String cookieValue=response.getFirstHeader("Set-Cookie").getValue(); , cookieValue.indexOf(";")); } } catch (Exception e) { //e.printStackTrace(); } finally { if (null != httpclient) { httpclient.getConnectionManager().shutdown(); } } return result; } /** * 文件上传请求 */ public String httpPostFile(String url, Map<String, String> param, File file) { DefaultHttpClient httpclient = null; HttpPost httpPost = null; HttpResponse response = null; HttpEntity entity = null; String result = ""; //StringBuffer sb = new StringBuffer(); try { httpclient = new DefaultHttpClient(); //设置cookie的兼容性---考虑是否需要 httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY); //httpclient.getParams().setParameter("http.protocol.content-charset",Charset.forName(this.TextEncoding)); httpPost = new HttpPost(url); //设置各种头信息 ) { for (Entry<String, String> entry : headers.entrySet()) { httpPost.setHeader(entry.getKey(), entry.getValue()); } } FileBody fileBody=new FileBody(file); //对请求的表单域进行填充 //MultipartEntity reqeustEntity = new MultipartEntity(); MultipartEntity reqeustEntity =new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null, Charset.forName(this.TextEncoding)); if(param!=null){ String key=null,value=null; StringBody body; for (Entry<String, String> set : param.entrySet()) { key = set.getKey(); value=set.getValue()==null ? "" : set.getValue(); body=new StringBody(value,Charset.forName(this.TextEncoding)); reqeustEntity.addPart(key, body); } } reqeustEntity.addPart("file1", fileBody);//本案例中file1在后 // 设置类型 //reqeustEntity.setContentType("application/x-www-form-urlencoded"); // 设置请求的数据 httpPost.setEntity(reqeustEntity); //设置连接超时时间 HttpConnectionParams.setConnectionTimeout(httpPost.getParams(), ); //设置读数据超时时间 HttpConnectionParams.setSoTimeout(httpPost.getParams(), ); System.out.println("executing request " + httpclient.getRequestExecutor()); //开始进行请求 response = httpclient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) {//请求不成功 System.out.println("HttpStatus ERROR" + "Method failed: " + response.getStatusLine()); return "error"; } entity = response.getEntity(); if (null != entity) { byte[] bytes = EntityUtils.toByteArray(entity); result = new String(bytes, this.TextEncoding); } else { result = ""; } if(this.SessionIdFlag==true){ //获取SessionId String cookieValue=response.getFirstHeader("Set-Cookie").getValue(); , cookieValue.indexOf(";")); } }catch(Exception e){ e.toString(); } return result; } /** * 发送 get 请求 * param转换为url地址中的& */ public String httpGet(String url, Map<String, String> param, boolean flagUrlAdd) { String result = null; DefaultHttpClient httpclient = null; HttpGet httpGet = null; HttpResponse response=null; StringBuffer sb=new StringBuffer(); try { //传入参数 ){ sb.append(flagUrlAdd==true ? "&" : "");//类似这种http://www.baidu.com/cgi-bin/Info.dll?haozhulin&password=123456 Iterator<Entry<String,String>> it=param.entrySet().iterator(); Entry<String,String> entry=null; String value=null; while(it.hasNext()){ entry=it.next(); value= param.get(entry.getKey())==null ? "" : entry.getValue(); sb.append(entry.getKey()).append("=").append(value); if(it.hasNext()){ sb.append("&"); } } } httpclient=new DefaultHttpClient(); System.out.println(url+sb.toString()); httpGet=new HttpGet(url+sb.toString()); //设置各种头信息 ) { for (Entry<String, String> entry : headers.entrySet()) { httpGet.setHeader(entry.getKey(), entry.getValue()); } } response = httpclient.execute(httpGet); HttpEntity entity = response.getEntity(); result = EntityUtils.toString(entity, this.TextEncoding); if(this.SessionIdFlag==true){ //获取SessionId String cookieValue=response.getFirstHeader("Set-Cookie").getValue(); , cookieValue.indexOf(";")); } } catch (Exception e) { //e.printStackTrace(); } finally { httpGet.releaseConnection(); } return result; } public String getTextEncoding() { return TextEncoding; } public void setTextEncoding(String textEncoding) { TextEncoding = textEncoding; } public Map<String, String> getHeaders() { return headers; } public void setHeaders(Map<String, String> headers) { this.headers = headers; } public String getSessionId() { return SessionId; } public void setSessionId(String sessionId) { SessionId = sessionId; } public boolean getSessionIdFlag() { return SessionIdFlag; } public void setSessionIdFlag(boolean sessionIdFlag) { SessionIdFlag = sessionIdFlag; } public String getResultEncoding() { return ResultEncoding; } public void setResultEncoding(String resultEncoding) { ResultEncoding = resultEncoding; } }
java HttpClientUtil帮助类的更多相关文章
- java自定义注解类
一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import ...
- 基础知识(05) -- Java中的类
Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...
- java中Inetaddress类
InetAddress类 InetAddress类用来封装我们前面讨论的数字式的IP地址和该地址的域名. 你通过一个IP主机名与这个类发生作用,IP主机名比它的IP地址用起来更简便更容易理解. Ine ...
- Java集合---Array类源码解析
Java集合---Array类源码解析 ---转自:牛奶.不加糖 一.Arrays.sort()数组排序 Java Arrays中提供了对所有类型的排序.其中主要分为Prim ...
- 浅析Java.lang.ProcessBuilder类
最近由于工作需要把用户配置的Hive命令在Linux环境下执行,专门做了一个用户管理界面特地研究了这个不经常用得ProcessBuilder类.所以把自己的学习的资料总结一下. 一.概述 P ...
- 浅析Java.lang.Process类
一.概述 Process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序). Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.检查进程的 ...
- 浅析Java.lang.Runtime类
一.概述 Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接. 一般不能实例化一个Runtime对象, ...
- java单例类/
java单例类 一个类只能创建一个实例,那么这个类就是一个单例类 可以重写toString方法 输出想要输出的内容 可以重写equcal来比较想要比较的内容是否相等 对于final修饰的成员变量 一 ...
- JAVA中的类和接口
1.类: 类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...
随机推荐
- Web比赛4
广外2019-11-30 @广外-枯燥的抽奖 <?php #这不是抽奖程序的源代码!不许看! header("Content-Type: text/html;charset=utf-8 ...
- XML中不能识别&符号, 需要转义吗?
“&”在XML中是具有特殊含义的,是转义字符的前缀,如果要想用这个字符就需要转义.遇到“&”就替换成“&”就好了; xml所有转义符 和 & & 大于 ...
- [CF544E]Remembering Strings_状压dp
E. Remembering Strings 题目大意: You have multiset of n strings of the same length, consisting of lowerc ...
- (5.13)mysql高可用系列——1主3从复制(SSL)
目录: [0]需求 目前使用Mysql数据库,100GB+数据量,需要实现1主3从环境. 需要实现SSL安全复制,同时需要测试异常宕机切换演练 [1]实验环境 数据库架构:主从复制,基于主库搭建3个从 ...
- 【深入浅出-JVM】(2):原码、反码、补码
计算机中有补码表示 0 0 为正数 原码 00000000 00000000 00000000 00000000 反码 00000000 00000000 00000000 00000000 正数反码 ...
- PAT B1020 月饼(25)
题目描述 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部 ...
- Jmeter之正则表达式取样器~案例详解
正则:按照规则提取数据 场景:A请求获得的响应数据,需要作为B请求的提交数据(eg:A:购物车页面→B:下单(正则提取购物车的商品信息,数量信息等)) 常用正则表达式:(.+?) 辅助:添加Debug ...
- 怎样理解 Vue 中的 v-if 和 v-show ?
1. v-if 实现了真正的 条件渲染, 条件为真时, 节点被创建, 相应的监听函数也会生效, 条件为假时, 节点被销毁, 触发事件监听函数不会生效. 而 v-show 只是使用了 display:n ...
- asp.net 10 Cookie & Session
Cookie 1.什么是Cookie 一小段文本,明文的数据,关于网站相关的文本字符串数据.一个客户端状态保持机制~ 存储在客户端的浏览器内存里面或者磁盘(如果不指定过期时间,那么存储在客户端浏览器内 ...
- 三、maven学习-高级
maven父子工程