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.类: 类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...
随机推荐
- paper:Exploiting Query Reformulations for Web Search Result Diversification
一. 使用查询重构来用于网页搜索结果多样性 paper本文贡献: 1. 提出了一个概率框架,这个框架显式地建模了模糊查询的信息需求---利用子查询, 2. 分析了子查询的有效性---从由三个搜索引擎提 ...
- Infix to Postfix Expression
Example : Infix : (A+B) * (C-D) ) Postfix: AB+CD-* 算法: 1. Scan the infix expression from left to rig ...
- Luogu P4426 [HNOI/AHOI2018]毒瘤
题目 神仙题. 首先我们可以把题意转化为图的独立集计数.显然这个东西是个NP-Hard的. 然后我们可以注意到\(m\le n+10\),也就是说最多有\(11\)条非树边. 我们现在先考虑一下,树上 ...
- javascript的一些有用函数记录,不断更新。。。
addLoadEvent函数: 众所周知,html文档加载完后会立即执行一个onload函数.但是onload函数只能包含一个被执行的函数,也就是你需要在加载完文档后执行的一个自己的函数.在实际中ht ...
- T100——作业单身网格消失,查询时单身无法输入
增加代码:
- sql之游标
--select * from master..sysprocessesuse testdeclare my_cursor cursor scroll dynamic --scroll表示可以向前 ...
- WAMPSERVER-服务器离线无法切换到在线状态问题的解决
问题描述:WAMPSERVER-服务器离线“切换到在线状态”则弹出: 解决方案: 本地连接---属性----Internet 协议(TCP/IP)---高级---wins----导入LMHOSTS( ...
- Winform_chart控件_心得
效果图: 1.首先,在工具箱找到chart控件,拖到窗体中. 2.关于chart控件的细节设计: series集合设计: chartType可以选择折线图.柱状图.圆饼图等等. isValueShow ...
- python对比线程,进程,携程,异步,哪个快
目录概念介绍测试环境开始测试测试[单进程单线程]测试[多进程 并行]测试[多线程 并发]测试[协程 + 异步]结果对比绘图展示概念介绍首先简单介绍几个概念: 进程和线程进程就是一个程序在一个数据集上的 ...
- Java并发编程——线程池
本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 一.Java中的ThreadPoolExecutor类 ...