zoukankan      html  css  js  c++  java
  • HttpClient工具类

    package com.wm.utils;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import org.apache.http.Header;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpHost;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.NameValuePair;
    import org.apache.http.auth.AuthScope;
    import org.apache.http.auth.UsernamePasswordCredentials;
    import org.apache.http.client.CredentialsProvider;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.entity.GzipDecompressingEntity;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpDelete;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.methods.HttpPut;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.BasicCredentialsProvider;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.HttpConnectionParams;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;
    
    import common.util.ObjectUtil;
    
    /**
     * HttpClient工具类
     */
    @SuppressWarnings("deprecation")
    public class HttpClientUtil {
    
    	public static String accept = "*/*";
    	public static String acceptEncoding = "gzip, deflate, sdch";
    	public static String acceptLanguage = "zh-CN,zh;q=0.8,en;q=0.6";
    	public static String connection = "keep-alive";
    	public static String contentType = "application/x-www-form-urlencoded";
    	public static String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2896.3 Safari/537.36";
    	public static int time_out = 30000;// 超时时间
    	public static boolean isGetSetCookie = false;// 是否获取set-cookie
    	public static String cookie = "";// set-cookie
    	public static String proxyIP = "";// 代理ip
    	public static int port = 0;// 端口号
    	public static String proxyUsername = "";// 代理账号
    	public static String proxyPassword = "";// 代理密码
    
    	
    	/**
    	 * Get
    	 * 
    	 * @param url
    	 * @param charset	字符集。utf-8
    	 * @return
    	 */
    	public static String get(String url) {
    		// 关闭HttpClient系统日志;
    		System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
    		System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
    		System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "stdout");
    
    		HttpResponse response = null;
    		HttpEntity httpEntity = null;
    		String content = null;
    		try {
    //			CloseableHttpClient httpClient = HttpClients.createDefault();
    			CloseableHttpClient httpClient = HttpPoolManager.getHttpClient(); //http连接池
    			HttpGet get = new HttpGet(url);
    			// 请求头
    			get.addHeader("Accept", accept);
    			get.addHeader("Accept-Encoding", acceptEncoding);
    			get.addHeader("Accept-Language", acceptLanguage);
    			get.addHeader("Connection", connection);
    			get.addHeader("Content-Type", contentType);
    			get.addHeader("User-Agent", userAgent);
    			get.addHeader("cookie", cookie);
    			// 超时时间
    			get.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, time_out);// 设置连接超时时间
    			get.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, time_out);// 设置数据传输超时时间
    			// 设置代理
    			if(!StringUtil.isEmpty(proxyIP)) {
    				CredentialsProvider credsProvider = new BasicCredentialsProvider();
    				credsProvider.setCredentials(new AuthScope(proxyIP, port), new UsernamePasswordCredentials(proxyUsername, proxyPassword));
    				httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    				HttpHost proxy = new HttpHost(proxyIP, port);
    				RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
    				get.setConfig(config);
    			}
    			// 执行请求
    			response = httpClient.execute(get);
    			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    				// 判断gzip,解压缩
    				if (!ObjectUtil.isEmpty(response.getLastHeader("Content-Encoding")) && (response.getLastHeader("Content-Encoding").toString()).indexOf("gzip") >= 0) {
    					response.setEntity(new GzipDecompressingEntity(response.getEntity()));
    				}
    				content = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);
    				if(isGetSetCookie){
    					Header[] cookieHeader = response.getHeaders("Set-Cookie");
    					if(null != cookieHeader && cookieHeader.length > 0){
    						cookie = cookieHeader[0].getValue();
    						isGetSetCookie = false;
    					}
    				}
    			}
    		} catch (Exception e) {
    			LogUtil.error("HttpClientUtil.get异常", e);
    		} finally {
    			if (null != httpEntity) {
    				try {
    					httpEntity.consumeContent();
    				} catch (IOException e) {
    					LogUtil.error("HttpClientUtil.get异常", e);
    				}
    			}
    		}
    		return content;
    	}
    
    	/**
    	 * Post
    	 * 
    	 * @param url
    	 * @param maps	参数组
    	 * @return
    	 */
    	public static String post(String url, Map<String, String> maps) {
    		// 关闭HttpClient系统日志;
    		System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
    		System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
    		System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "stdout");
    
    		List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    		for (Entry<String, String> map : maps.entrySet()) {
    			nvps.add(new BasicNameValuePair(map.getKey(), map.getValue()));
    		}
    		String content = null;
    		HttpResponse response = null;
    		HttpEntity httpEntity = null;
    		try {
    //			CloseableHttpClient httpClient = HttpClients.createDefault(); 
    			CloseableHttpClient httpClient = HttpPoolManager.getHttpClient(); //http连接池
    			HttpPost post = new HttpPost(url);
    			// 请求头
    			post.addHeader("Accept", accept);
    			post.addHeader("Accept-Encoding", acceptEncoding);
    			post.addHeader("Accept-Language", acceptLanguage);
    			post.addHeader("Connection", connection);
    			post.addHeader("Content-Type", contentType);
    			post.addHeader("User-Agent", userAgent);
    			post.addHeader("cookie", cookie);
    			// 超时时间
    			post.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, time_out);// 设置连接超时时间
    			post.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, time_out);// 设置数据传输超时时间
    			// 设置代理
    			if(!StringUtil.isEmpty(proxyIP)) {
    				CredentialsProvider credsProvider = new BasicCredentialsProvider();
    				credsProvider.setCredentials(new AuthScope(proxyIP, port), new UsernamePasswordCredentials(proxyUsername, proxyPassword));
    				httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    				HttpHost proxy = new HttpHost(proxyIP, port);
    				RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
    				post.setConfig(config);
    			}
    			// 执行请求
    			post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
    			response = httpClient.execute(post);
    			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    				// 判断gzip,解压缩
    				if (!ObjectUtil.isEmpty(response.getLastHeader("Content-Encoding"))	&& (response.getLastHeader("Content-Encoding").toString()).indexOf("gzip") >= 0) {
    					response.setEntity(new GzipDecompressingEntity(response.getEntity()));
    				}
    				httpEntity = response.getEntity();
    				content = EntityUtils.toString(httpEntity, HTTP.UTF_8);
    				if(isGetSetCookie){
    					Header[] cookieHeader = response.getHeaders("Set-Cookie");
    					if(null != cookieHeader && cookieHeader.length > 0){
    						cookie = cookieHeader[0].getValue();
    						isGetSetCookie = false;
    					}
    				}
    			}
    		} catch (Exception e) {
    			LogUtil.error("HttpClientUtil.post异常", e);
    		} finally {
    			if (null != httpEntity) {
    				try {
    					httpEntity.consumeContent();
    				} catch (IOException e) {
    					LogUtil.error("HttpClientUtil.post异常", e);
    				}
    			}
    		}
    		return content;
    	}
    
    	/**
    	 * post流
    	 * @param url
    	 * @param data
    	 *            (以流的方式发送请求参数)
    	 * @return
    	 */
    	public static String postStream(String url, String data) {
    		// 关闭HttpClient系统日志;
    		System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
    		System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
    		System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "stdout");
    
    		String content = null;
    		HttpResponse response = null;
    		HttpEntity httpEntity = null;
    		try {
    //			CloseableHttpClient httpClient = HttpClients.createDefault(); 
    			CloseableHttpClient httpClient = HttpPoolManager.getHttpClient(); //http连接池
    			HttpPost post = new HttpPost(url);
    			// 请求头
    			post.addHeader("Accept", accept);
    			post.addHeader("Accept-Encoding", acceptEncoding);
    			post.addHeader("Accept-Language", acceptLanguage);
    			post.addHeader("Connection", connection);
    			post.addHeader("Content-Type", contentType);
    			post.addHeader("User-Agent", userAgent);
    			post.addHeader("cookie", cookie);
    			// 超时时间
    			post.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, time_out);// 设置连接超时时间
    			post.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, time_out);// 设置数据传输超时时间
    			// 设置代理
    			if(!StringUtil.isEmpty(proxyIP)) {
    				CredentialsProvider credsProvider = new BasicCredentialsProvider();
    				credsProvider.setCredentials(new AuthScope(proxyIP, port), new UsernamePasswordCredentials(proxyUsername, proxyPassword));
    				httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    				HttpHost proxy = new HttpHost(proxyIP, port);
    				RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
    				post.setConfig(config);
    			}
    			// 执行请求
    			StringEntity entity = new StringEntity(data, "UTF-8");
    			post.setEntity(entity);
    			response = httpClient.execute(post);
    			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    				// 判断gzip,解压缩
    				if (!ObjectUtil.isEmpty(response.getLastHeader("Content-Encoding"))	&& (response.getLastHeader("Content-Encoding").toString()).indexOf("gzip") >= 0) {
    					response.setEntity(new GzipDecompressingEntity(response.getEntity()));
    				}
    				httpEntity = response.getEntity();
    				content = EntityUtils.toString(httpEntity, HTTP.UTF_8);
    				if(isGetSetCookie){
    					Header[] cookieHeader = response.getHeaders("Set-Cookie");
    					if(null != cookieHeader && cookieHeader.length > 0){
    						cookie = cookieHeader[0].getValue();
    						isGetSetCookie = false;
    					}
    				}
    			}
    		} catch (Exception e) {
    			LogUtil.error("HttpClientUtil.postStream异常", e);
    		} finally {
    			if (null != httpEntity) {
    				try {
    					httpEntity.consumeContent();
    				} catch (IOException e) {
    					LogUtil.error("HttpClientUtil.postStream异常", e);
    				}
    			}
    		}
    		return content;
    	}
    	
    	
    	/**
    	 * Restful API Delete
    	 * @param url
    	 * @return
    	 */
    	public static String delete(String url){
    		// 关闭HttpClient系统日志;
    		System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
    		System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
    		System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "stdout");
    
    		HttpResponse response = null;
    		HttpEntity httpEntity = null;
    		String content = null;
    		try {
    			CloseableHttpClient httpClient = HttpPoolManager.getHttpClient(); //http连接池
    			HttpDelete delete = new HttpDelete(url);
    			// 请求头
    			delete.addHeader("Accept", accept);
    			delete.addHeader("Accept-Encoding", acceptEncoding);
    			delete.addHeader("Accept-Language", acceptLanguage);
    			delete.addHeader("Connection", connection);
    			delete.addHeader("Content-Type", contentType);
    			delete.addHeader("User-Agent", userAgent);
    			delete.addHeader("cookie", cookie);
    			// 超时时间
    			delete.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, time_out);// 设置连接超时时间
    			delete.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, time_out);// 设置数据传输超时时间
    			// 设置代理
    			if(!StringUtil.isEmpty(proxyIP)) {
    				CredentialsProvider credsProvider = new BasicCredentialsProvider();
    				credsProvider.setCredentials(new AuthScope(proxyIP, port), new UsernamePasswordCredentials(proxyUsername, proxyPassword));
    				httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    				HttpHost proxy = new HttpHost(proxyIP, port);
    				RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
    				delete.setConfig(config);
    			}
    			// 执行请求
    			response = httpClient.execute(delete);
    			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    				// 判断gzip,解压缩
    				if (!ObjectUtil.isEmpty(response.getLastHeader("Content-Encoding")) && (response.getLastHeader("Content-Encoding").toString()).indexOf("gzip") >= 0) {
    					response.setEntity(new GzipDecompressingEntity(response.getEntity()));
    				}
    				content = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);
    				if(isGetSetCookie){
    					Header[] cookieHeader = response.getHeaders("Set-Cookie");
    					if(null != cookieHeader && cookieHeader.length > 0){
    						cookie = cookieHeader[0].getValue();
    						isGetSetCookie = false;
    					}
    				}
    			}
    		} catch (Exception e) {
    			LogUtil.error("HttpClientUtil.delete异常", e);
    		} finally {
    			if (null != httpEntity) {
    				try {
    					httpEntity.consumeContent();
    				} catch (IOException e) {
    					LogUtil.error("HttpClientUtil.delete异常", e);
    				}
    			}
    		}
    		return content;
    	}
    	
    	/**
    	 * Restful API PUT
    	 * @param url
    	 * @param data
    	 * @return
    	 */
    	public static String putStream(String url, String data){
    		// 关闭HttpClient系统日志;
    		System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
    		System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
    		System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "stdout");
    
    		String content = null;
    		HttpResponse response = null;
    		HttpEntity httpEntity = null;
    		try {
    			CloseableHttpClient httpClient = HttpPoolManager.getHttpClient(); //http连接池
    			HttpPut put = new HttpPut(url);
    			// 请求头
    			put.addHeader("Accept", accept);
    			put.addHeader("Accept-Encoding", acceptEncoding);
    			put.addHeader("Accept-Language", acceptLanguage);
    			put.addHeader("Connection", connection);
    			put.addHeader("Content-Type", contentType);
    			put.addHeader("User-Agent", userAgent);
    			put.addHeader("cookie", cookie);
    			// 超时时间
    			put.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, time_out);// 设置连接超时时间
    			put.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, time_out);// 设置数据传输超时时间
    			// 设置代理
    			if(!StringUtil.isEmpty(proxyIP)) {
    				CredentialsProvider credsProvider = new BasicCredentialsProvider();
    				credsProvider.setCredentials(new AuthScope(proxyIP, port), new UsernamePasswordCredentials(proxyUsername, proxyPassword));
    				httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    				HttpHost proxy = new HttpHost(proxyIP, port);
    				RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
    				put.setConfig(config);
    			}
    			// 执行请求
    			StringEntity entity = new StringEntity(data, "UTF-8");
    			put.setEntity(entity);
    			
    			response = httpClient.execute(put);
    			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_CREATED) {
    				// 判断gzip,解压缩
    				if (!ObjectUtil.isEmpty(response.getLastHeader("Content-Encoding"))	&& (response.getLastHeader("Content-Encoding").toString()).indexOf("gzip") >= 0) {
    					response.setEntity(new GzipDecompressingEntity(response.getEntity()));
    				}
    				httpEntity = response.getEntity();
    				content = EntityUtils.toString(httpEntity, HTTP.UTF_8);
    				if(isGetSetCookie){
    					Header[] cookieHeader = response.getHeaders("Set-Cookie");
    					if(null != cookieHeader && cookieHeader.length > 0){
    						cookie = cookieHeader[0].getValue();
    						isGetSetCookie = false;
    					}
    				}
    			}
    		} catch (Exception e) {
    			LogUtil.error("HttpClientUtil.putStream异常", e);
    		} finally {
    			if (null != httpEntity) {
    				try {
    					httpEntity.consumeContent();
    				} catch (IOException e) {
    					LogUtil.error("HttpClientUtil.putStream异常", e);
    				}
    			}
    		}
    		return content;
    	}
    	
    	
    }

  • 相关阅读:
    Flask把变量注册到模板中
    $.each与$(data).each区别
    【Python备忘】python判断文件和文件夹是否存在
    ISP图像质量自动化测试方法
    使用微软的(how-old.net)构建智能门店管理系统
    在virtualenv中安装libxml2和libxslt
    Python 装饰器学习以及实际使用场景实践
    tensorflow零起点快速入门(4) --入门常用API
    tensorflow零起点快速入门(3)
    树莓派和STM32通过USB和串口通信记录
  • 原文地址:https://www.cnblogs.com/archermeng/p/7537050.html
Copyright © 2011-2022 走看看