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.类: 类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...
随机推荐
- Linux配置文件的修改
在很多时候,我们需要对Linux的配置文件进行修改.此时就涉及到了不同Linux发行版的修改配置问题.下面就以主流的几个操作系统(Unix:Solaris,Linux:Ubuntu,Redhat)作为 ...
- Mysql——通配符和正则表达式的使用
1.like操作符和百分号通配符 %表示任何字符出现任意次数. 查询出表TABLE中NAME字段中任意位置包含i的行: select * from TABLE where NAME like '%i% ...
- 【Python】【demo实验8】【练习实例】【计算当天是当年的第几天】
题目:输入某年某月某日,判断这一天是这一年的第几天? 程序分析: 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天: 对于年份,需 ...
- SQL SERVER 数据有CHAR(10),CHAR(13),CHAR(9)隐藏字符
原文:SQL SERVER 数据有CHAR(10),CHAR(13),CHAR(9)隐藏字符 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Givi ...
- Codeforces Round #574 (Div. 2)补题
A. Drinks Choosing 统计每种酒有多少人偏爱他们. ki 为每种酒的偏爱人数. 输出ans = (n + 1)/2 > Σki / 2 ? (n + 1)/2 - Σki / ...
- 通过using声明改变个别成员的可访问性
C++的语法中通过在派生类中使用using声明可以忽略继承方式 , 而让派生类对于基类的私有和保护成员具有特殊的访问权限 , 甚至可以改变派生类对象对于基类成员的访问权限 . 个人认为这种语法很容易让 ...
- linux的安装和配置
转载:https://www.cnblogs.com/hhaahh/p/10404093.html 1.VMware简介 此软件是一个虚拟的pc机软件,可以在现有操作系统中虚拟出一个新的硬件环境,以此 ...
- T100——单据别的新增、修改设置
何为单据别,例如下图,新增的时候开窗选择单据别: 新增单据别: 1.首先在azzi600 系统分类码维护作业里面新增新的系统分类码(在系统分类码24下新增),如图: 2.在azzi910 作业基本数据 ...
- vue axios拦截跳转
第一步:添加需要拦截的页面 { path: '/control', name: 'Control', meta: { requireAuth: true }, 第二步:页面拦截 router.befo ...
- 并不对劲的CF1239B&C&D Programming Task in the Train to Catowice City
CF1239B The World Is Just a Programming Task 题目描述 定义一个括号序列s是优秀的,当且仅当它是以下几种情况的一种: 1.|s|=0 2.s='('+t+' ...