httpUtil工具类


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.annotation.Resource;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

/**
 * 模拟浏览器请求任何一个网址
 * @author 
 */
@Component("httpUtil")
public class HttpUtil
{
	/* 文件工具类 */
	@Resource
	private FileUtil fileUtil;
	
	public class TrustAnyHostnameVerifier implements HostnameVerifier
	{
		public boolean verify(String hostname, SSLSession session)
		{
			// 直接返回true
			return true;
		}
	}
	/**
	 * 输入一个url,
	 * 返回这个url对应的html代码
	 * 
	 * @param url:网址
	 * @return 返回网址对应的html代码
	 */
	public static String methodGet(String urlStr)
	{
		//ConstatFinalUtil.SYS_LOGGER.info("--methodGet--url:{}",urlStr);
		StringBuffer sb = new StringBuffer() ; 
		try
		{
			URL url = new URL(urlStr);
			HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
			
			/* 获取网址对应的输入流和输出流 */
			InputStream is = connection.getInputStream() ;
			
			BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
			
			String line = "" ; 
			while((line = br.readLine()) != null)
			{
				sb.append(line);
			}
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		return sb.toString() ; 
	}
	
	/**
	 * 输入一个url,
	 * 返回这个url对应的html代码
	 * 
	 * @param url:网址
	 * @param paramsMap	提交参数;键=值
	 * @return 返回网址对应的html代码
	 */
	public String methodPost(String urlStr,Map<String, String> paramsMap)
	{
		//ConstatFinalUtil.SYS_LOGGER.info("--methodGet--url:{}",urlStr);
		StringBuffer sb = new StringBuffer() ; 
		try
		{
			URL url = new URL(urlStr);
			HttpURLConnection connection = (HttpURLConnection) url.openConnection() ; 
			
			/* Post请求,必须加以下操作 */
			connection.setDoOutput(true);
			connection.setDoInput(true);
			connection.setRequestMethod("POST");
			
			/* 获取网址对应的输入流和输出流 */
			OutputStream os = connection.getOutputStream() ;
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
			
			/* 先向服务器写数据
			 * 如何将我们的参数写到输出流呢???
			 * 得遵循HTTP协议,看浏览器怎么做,我们也怎么做
			 * 
			 * URL get中的字符串
			 * method=submit&email=aaa&password=bbbb
			 *  */
			StringBuffer paramSb = new StringBuffer() ; 
			for (Iterator iterator = paramsMap.entrySet().iterator(); iterator.hasNext();)
			{
				Entry me = (Entry) iterator.next();
				String key = me.getKey() + ""; 
				String value = me.getValue() + "" ;
				paramSb.append(key + "=" + value + "&");
			}
			/*
			 * method=submit&email=aaa&password=bbbb
			 * email=bb&method=submit&password=cc
			 * */
			bw.write(paramSb.toString());
			bw.flush();
			bw.close();
			
			InputStream is = connection.getInputStream() ;
			BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
			
			String line = "" ; 
			while((line = br.readLine()) != null)
			{
				sb.append(line);
			}
			
			br.close();
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		return sb.toString() ; 
	}
	
	public static void main(String[] args)
	{
		HttpUtil httpUtil = new HttpUtil() ;
		
		/*String url = "http://c.v.qq.com/vchannelinfo?otype=json&uin=599568d32c9189aaabe3c6c6aff3832c&qm=1&pagenum=3&num=10&sorttype=0&orderflag=0&callback=jQuery191013239971445429688_1498793173745&low_login=1&_=1498793173756" ; 
		String res = httpUtil.methodGet(url);
		System.out.println(res);*/
		String ceshString ="{json={\"method\":\"verifyAdminsAuth\",\"data\":{\"currentUrl\":\"/carConAll-web-back/back/vehicle/vehHistoryList.htm?from=home\",\"adminsId\":2},\"encrypt\":\"e12299c068c5e8dd3a1e30ed9780b82721940a7779abfeaecbb409a9466fd673\",\"version\":\"1\",\"pubKey\":\"\"}}";
		JSONObject parse = (JSONObject) JSON.parse(ceshString);
		/*
		 * String url = "http://localhost:10001/shop-web-head/insert.jsp" ;
		 * Map<String,String> paramsMap = new HashMap<String, String>();
		 * paramsMap.put("email", "bb"); paramsMap.put("password", "cc");
		 * paramsMap.put("method", "submit"); String res =
		 * httpUtil.methodPost(url,paramsMap);
		 */
		System.out.println(parse);
	}
	
	/**
	 * 下载文件
	 */
	public boolean downLoadFile(Map<String, String> headerMap,Map<String, String> paramsMap,OutputStream os)
	{
		HttpURLConnection connect = null ;
		try
		{
			URL url = new URL(paramsMap.get("requestURL"));
			connect = (HttpURLConnection) url
					.openConnection();
			connect.setConnectTimeout(ConstatFinalUtil.REQ_CONNECT_TIMEOUT);
			connect.setReadTimeout(ConstatFinalUtil.READ_TIMEOUT);

			StringBuffer paramssb = new StringBuffer();
			for (Iterator iterator = paramsMap.entrySet().iterator(); iterator
					.hasNext();)
			{
				Map.Entry me = (Map.Entry) iterator.next();
				if (!"requestURL".equalsIgnoreCase(me.getKey() + "") && !"retry".equalsIgnoreCase(me.getKey() + ""))
				{
					paramssb.append(me.getKey() + "=" + me.getValue() + "&");
				}
			}

			if (paramssb.toString().endsWith("&"))
			{
				paramssb.delete(paramssb.length() - 1, paramssb.length());
			}
			connect.setRequestProperty(
					"Cookie",
					"Hm_lvt_2d57a0f88eed9744a82604dcfa102e49=1386575661; CNZZDATA5342694=cnzz_eid%3D1753424715-1386575827-http%253A%252F%252Fwww.btctrade.com%26ntime%3D1386750475%26cnzz_a%3D5%26ltime%3D1386750483033%26rtime%3D1; pgv_pvi=8171956224; __utma=252052442.1822116731.1386640814.1386741966.1386750468.3; __utmz=252052442.1386640814.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wafenterurl=/; wafcookie=51a45a2229469ee92bbd8cc281e98e91; __utmb=252052442.1.10.1386750468; __utmc=252052442; wafverify=afe13eda6d99c7f141d7dd3966b59d9e; USER_PW=ab3f61ee826a95e51734cf7174100382; PHPSESSID=9f2c19d6ffd0ef808ba8bac0b74ab0f3; IESESSION=alive; pgv_si=s1618283520");
			connect.setRequestProperty("User-Agent",
					"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");

			for (Iterator iterator = headerMap.entrySet().iterator(); iterator
					.hasNext();)
			{
				Entry me = (Entry) iterator.next();
				connect.setRequestProperty(me.getKey() + "", me.getValue() + "");
			}
			InputStream is =  connect.getInputStream() ; 
			return this.fileUtil.copyFile(is, os);
		}catch (Exception e)
		{
			try
			{
				ConstatFinalUtil.SYS_LOGGER.info("http的Post请求失败了;响应码:{};请求头:{};请求体:{}",
						connect != null ? connect.getResponseCode() : connect,headerMap,paramsMap,e);
				Thread.sleep(ConstatFinalUtil.PAGE_BATCH_SIZE);
			} catch (Exception e1)
			{
				e1.printStackTrace();
			}
		}
		return false;
	}
	/**
	 * 上传文件
	 * @param requestMap 双传文件的信息
	 * @param filePath
	 * @return
	 */
	public String methodUploadFile(Map<String, String> headerMap,Map<String, String> requestMap)
	{
		String urlStr = headerMap.get("requestURL");
		if(!urlStr.endsWith("?"))
		{
			urlStr = urlStr + "?" ; 
		}
		for (Iterator iterator = requestMap.entrySet().iterator(); iterator.hasNext();)
		{
			Entry me = (Entry) iterator.next();
			String key = me.getKey() + "" ; 
			String val = me.getValue() + "" ; 
			urlStr = urlStr + "&" + key + "=" + val ; 
		}
		/* 返回值 */
		StringBuffer sbRes = new StringBuffer() ; 
		String filePath = requestMap.get("filePath");
		try
		{
			// 换行符
			final String newLine = "\r\n";
			final String boundaryPrefix = "--";
			// 定义数据分隔线
			String BOUNDARY = "========7d4a6d158c9";
			// 服务器的域名
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			// 设置为POST请求
			conn.setRequestMethod("POST");
			// 发送POST请求必须设置如下两行
			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setUseCaches(false);
			// 设置请求头参数
			conn.setRequestProperty("connection", "Keep-Alive");
			conn.setRequestProperty("Charsert", "UTF-8");
			conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

			OutputStream out = new DataOutputStream(conn.getOutputStream());

			// 上传文件
			File file = new File(filePath);
			StringBuilder sb = new StringBuilder();
			sb.append(boundaryPrefix);
			sb.append(BOUNDARY);
			sb.append(newLine);
			// 文件参数,photo参数名可以随意修改
			sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + filePath + "\"" + newLine);
			sb.append("Content-Type:application/octet-stream");
			// 参数头设置完以后需要两个换行,然后才是参数内容
			sb.append(newLine);
			sb.append(newLine);

			// 将参数头的数据写入到输出流中
			out.write(sb.toString().getBytes());

			// 数据输入流,用于读取文件数据
			DataInputStream in = new DataInputStream(new FileInputStream(file));
			byte[] bufferOut = new byte[1024];
			int bytes = 0;
			// 每次读1KB数据,并且将文件数据写入到输出流中
			while ((bytes = in.read(bufferOut)) != -1)
			{
				out.write(bufferOut, 0, bytes);
			}
			// 最后添加换行
			out.write(newLine.getBytes());
			in.close();

			// 定义最后数据分隔线,即--加上BOUNDARY再加上--。
			byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine).getBytes();
			// 写上结尾标识
			out.write(end_data);
			out.flush();
			out.close();

			// 定义BufferedReader输入流来读取URL的响应
			BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			String line = null;
			while ((line = reader.readLine()) != null)
			{
				sbRes.append(line);
			}

		} catch (Exception e)
		{
			ConstatFinalUtil.SYS_LOGGER.error("上传文件失败了;文件名:{}",filePath , e);
		}
		return sbRes.toString() ; 
	}
	
	/**
	 * Post请求
	 * 
	 * @param headerMap
	 *            请求头
	 * @param paramsMap
	 *            请求体参数
	 * @return
	 */
	public String methodPost(Map<String, String> headerMap,
			Map<String, String> paramsMap)
	{
		StringBuffer sb = new StringBuffer();
		//如果是https协议
		if(paramsMap.get("requestURL").startsWith("https"))
		{
			return this.methodHttpsPost(headerMap, paramsMap);
		}
		
		// 连续请求多次
		for (int i = 0; i < ConstatFinalUtil.REQ_COUNT; i++)
		{
			sb.delete(0, sb.length());
			HttpURLConnection connect = null ;
			try
			{
				URL url = new URL(paramsMap.get("requestURL"));
				connect = (HttpURLConnection) url
						.openConnection();
				connect.setConnectTimeout(ConstatFinalUtil.REQ_CONNECT_TIMEOUT);
				connect.setReadTimeout(ConstatFinalUtil.READ_TIMEOUT);
				connect.setDoInput(true);
				connect.setDoOutput(true);
	
				StringBuffer paramssb = new StringBuffer();
				for (Iterator iterator = paramsMap.entrySet().iterator(); iterator
						.hasNext();)
				{
					Map.Entry me = (Map.Entry) iterator.next();
					if (!"requestURL".equalsIgnoreCase(me.getKey() + "") && !"retry".equalsIgnoreCase(me.getKey() + ""))
					{
						paramssb.append(me.getKey() + "=" + me.getValue() + "&");
					}
				}
	
				if (paramssb.toString().endsWith("&"))
				{
					paramssb.delete(paramssb.length() - 1, paramssb.length());
				}
				connect.setRequestProperty(
						"Cookie",
						"Hm_lvt_2d57a0f88eed9744a82604dcfa102e49=1386575661; CNZZDATA5342694=cnzz_eid%3D1753424715-1386575827-http%253A%252F%252Fwww.btctrade.com%26ntime%3D1386750475%26cnzz_a%3D5%26ltime%3D1386750483033%26rtime%3D1; pgv_pvi=8171956224; __utma=252052442.1822116731.1386640814.1386741966.1386750468.3; __utmz=252052442.1386640814.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wafenterurl=/; wafcookie=51a45a2229469ee92bbd8cc281e98e91; __utmb=252052442.1.10.1386750468; __utmc=252052442; wafverify=afe13eda6d99c7f141d7dd3966b59d9e; USER_PW=ab3f61ee826a95e51734cf7174100382; PHPSESSID=9f2c19d6ffd0ef808ba8bac0b74ab0f3; IESESSION=alive; pgv_si=s1618283520");
				connect.setRequestProperty("User-Agent",
						"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
	
				for (Iterator iterator = headerMap.entrySet().iterator(); iterator
						.hasNext();)
				{
					Entry me = (Entry) iterator.next();
					connect.setRequestProperty(me.getKey() + "", me.getValue() + "");
				}

				
				BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
						connect.getOutputStream()));
				bw.write(paramssb.toString());
				bw.flush();
				
				BufferedReader br = null ; 
				//响应码成功
				if(connect.getResponseCode() == 200)
				{
					br = new BufferedReader(new InputStreamReader(
								connect.getInputStream(), "UTF-8"));
				}else
				{
					if(connect.getErrorStream() != null)
					{
						br = new BufferedReader(new InputStreamReader(
								connect.getErrorStream(), "UTF-8"));
					}else
					{
						br = new BufferedReader(new InputStreamReader(
								connect.getInputStream(), "UTF-8"));
					}
				}
				
				String line = "";
				while ((line = br.readLine()) != null)
				{
					sb.append(line.trim());
				}
				br.close();
				bw.close();
				
				//正常返回直接退出
				if(connect.getResponseCode() != 200)
				{
					ConstatFinalUtil.SYS_LOGGER.info("重试次数:{},响应码:{};响应信息:{};返回信息:{};请求头:{};请求体:{}",
							i,connect.getResponseCode(),connect.getResponseMessage(),sb,headerMap,paramsMap);
				}
				break ;
			}catch (Exception e)
			{
				try
				{
					ConstatFinalUtil.SYS_LOGGER.info("http的Post请求失败了;重试次数:{},响应码:{};返回信息:{};请求头:{};请求体:{}",
							i,connect != null ? connect.getResponseCode() : connect,sb,headerMap,paramsMap,e);
					Thread.sleep(ConstatFinalUtil.PAGE_BATCH_SIZE);
				} catch (Exception e1)
				{
					e1.printStackTrace();
				}
			}
			
			//重试机制
			if(!"true".equalsIgnoreCase(headerMap.get("retry")))
			{
				break ; 
			}
		}
		//没有查询到数据,调用https
		if(sb.length() <= 0)
		{
			return this.methodHttpsPost(headerMap, paramsMap);
		}
		return sb.toString();
	}
	
	/**
	 * HttpsPost请求
	 * 
	 * @param headerMap
	 *            请求头参数
	 * @param paramsMap
	 *            请求体参数
	 * @return
	 */
	public String methodHttpsPost(Map<String, String> headerMap,
			Map<String, String> paramsMap)
	{
		StringBuffer sb = new StringBuffer();
		// 连续请求多次
		for (int i = 0; i < ConstatFinalUtil.REQ_COUNT; i++)
		{
			sb.delete(0, sb.length());
			HttpsURLConnection connect = null ; 
			try
			{
				// Create a trust manager that does not validate certificate chains
				TrustManager[] trustAllCerts = new TrustManager[]
				{ new X509TrustManager()
				{
					public X509Certificate[] getAcceptedIssuers()
					{
						return null;
					}
	
					public void checkClientTrusted(X509Certificate[] certs,
							String authType)
					{
					}
	
					public void checkServerTrusted(X509Certificate[] certs,
							String authType)
					{
					}
				} };
	
				// Install the all-trusting trust manager
	
				SSLContext sc = SSLContext.getInstance("TLS");
				sc.init(null, trustAllCerts, new SecureRandom());
				HttpsURLConnection
						.setDefaultSSLSocketFactory(sc.getSocketFactory());
	
				URL url = new URL(paramsMap.get("requestURL"));
				connect = (HttpsURLConnection) url
						.openConnection();
				connect.setHostnameVerifier(new TrustAnyHostnameVerifier());
				connect.setConnectTimeout(ConstatFinalUtil.REQ_CONNECT_TIMEOUT);
				connect.setReadTimeout(ConstatFinalUtil.READ_TIMEOUT);
				connect.setDoInput(true);
				connect.setDoOutput(true);
				
				connect.setRequestProperty(
						"Cookie",
						"Hm_lvt_2d57a0f88eed9744a82604dcfa102e49=1386575661; CNZZDATA5342694=cnzz_eid%3D1753424715-1386575827-http%253A%252F%252Fwww.btctrade.com%26ntime%3D1386750475%26cnzz_a%3D5%26ltime%3D1386750483033%26rtime%3D1; pgv_pvi=8171956224; __utma=252052442.1822116731.1386640814.1386741966.1386750468.3; __utmz=252052442.1386640814.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wafenterurl=/; wafcookie=51a45a2229469ee92bbd8cc281e98e91; __utmb=252052442.1.10.1386750468; __utmc=252052442; wafverify=afe13eda6d99c7f141d7dd3966b59d9e; USER_PW=ab3f61ee826a95e51734cf7174100382; PHPSESSID=9f2c19d6ffd0ef808ba8bac0b74ab0f3; IESESSION=alive; pgv_si=s1618283520");
				connect.setRequestProperty("User-Agent",
						"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
	
				StringBuffer paramssb = new StringBuffer();
				for (Iterator iterator = paramsMap.entrySet().iterator(); iterator
						.hasNext();)
				{
					Map.Entry me = (Map.Entry) iterator.next();
					if (!"requestURL".equalsIgnoreCase(me.getKey() + ""))
					{
						paramssb.append(me.getKey() + "=" + me.getValue() + "&");
					}
				}
	
				if (paramssb.toString().endsWith("&"))
				{
					paramssb.delete(paramssb.length() - 1, paramssb.length());
				}
				// ConstatFinalUtil.LOGGER.info("-----"+ paramssb);
				for (Iterator iterator = headerMap.entrySet().iterator(); iterator
						.hasNext();)
				{
					Entry me = (Entry) iterator.next();
					if (!"requestURL".equalsIgnoreCase(headerMap.get("requestURL")))
					{
						connect.setRequestProperty(me.getKey() + "", me.getValue()
								+ "");
					}
				}
				connect.setRequestProperty(
						"Cookie",
						"Hm_lvt_2d57a0f88eed9744a82604dcfa102e49=1386575661; CNZZDATA5342694=cnzz_eid%3D1753424715-1386575827-http%253A%252F%252Fwww.btctrade.com%26ntime%3D1386750475%26cnzz_a%3D5%26ltime%3D1386750483033%26rtime%3D1; pgv_pvi=8171956224; __utma=252052442.1822116731.1386640814.1386741966.1386750468.3; __utmz=252052442.1386640814.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); wafenterurl=/; wafcookie=51a45a2229469ee92bbd8cc281e98e91; __utmb=252052442.1.10.1386750468; __utmc=252052442; wafverify=afe13eda6d99c7f141d7dd3966b59d9e; USER_PW=ab3f61ee826a95e51734cf7174100382; PHPSESSID=9f2c19d6ffd0ef808ba8bac0b74ab0f3; IESESSION=alive; pgv_si=s1618283520");
				connect.setRequestProperty("User-Agent",
						"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");

			
				BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
						connect.getOutputStream()));
				bw.write(paramssb.toString());
				bw.flush();

				BufferedReader br = null ; 
				//响应码成功
				if(connect.getResponseCode() == 200)
				{
					br = new BufferedReader(new InputStreamReader(
								connect.getInputStream(), "UTF-8"));
				}else
				{
					if(connect.getErrorStream() != null)
					{
						br = new BufferedReader(new InputStreamReader(
								connect.getErrorStream(), "UTF-8"));
					}else
					{
						br = new BufferedReader(new InputStreamReader(
								connect.getInputStream(), "UTF-8"));
					}
				}
				
				String line = "";
				while ((line = br.readLine()) != null)
				{
					sb.append(line.trim());
				}
				br.close();
				bw.close();
				
				//正常返回直接退出
				if(connect.getResponseCode() != 200)
				{
					ConstatFinalUtil.SYS_LOGGER.info("重试次数:{},响应码:{};响应信息:{};返回信息:{};请求头:{};请求体:{}",
							i,connect.getResponseCode(),connect.getResponseMessage(),sb,headerMap,paramsMap);
				}
				break ;
			} catch (Exception e)
			{
				try
				{
					ConstatFinalUtil.SYS_LOGGER.info("https的Post请求失败了;重试次数:{},响应码:{};返回信息:{};请求头:{};请求体:{}",
							i,connect != null ? connect.getResponseCode() : connect,sb,headerMap,paramsMap,e);
					
					Thread.sleep(ConstatFinalUtil.PAGE_BATCH_SIZE);
				} catch (Exception e1)
				{
					e1.printStackTrace();
				}
			}
			
			//重试机制
			if(!"true".equalsIgnoreCase(headerMap.get("retry")))
			{
				break ; 
			}
		}
		return sb.toString();
	}


//新增  百度AI api图片文字识别请求方法
	 public static String post(String requestUrl, String accessToken, String params)
	            throws Exception {
	        String contentType = "application/x-www-form-urlencoded";
	        return HttpUtil.post(requestUrl, accessToken, contentType, params);
	    }

	    public static String post(String requestUrl, String accessToken, String contentType, String params)
	            throws Exception {
	        String encoding = "UTF-8";
	        if (requestUrl.contains("nlp")) {
	            encoding = "GBK";
	        }
	        return HttpUtil.post(requestUrl, accessToken, contentType, params, encoding);
	    }

	    public static String post(String requestUrl, String accessToken, String contentType, String params, String encoding)
	            throws Exception {
	        String url = requestUrl + "?access_token=" + accessToken;
	        return HttpUtil.postGeneralUrl(url, contentType, params, encoding);
	    }

	    public static String postGeneralUrl(String generalUrl, String contentType, String params, String encoding)
	            throws Exception {
	        URL url = new URL(generalUrl);
	        // 打开和URL之间的连接
	        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
	        connection.setRequestMethod("POST");
	        // 设置通用的请求属性
	        connection.setRequestProperty("Content-Type", contentType);
	        connection.setRequestProperty("Connection", "Keep-Alive");
	        connection.setUseCaches(false);
	        connection.setDoOutput(true);
	        connection.setDoInput(true);

	        // 得到请求的输出流对象
	        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
	        out.write(params.getBytes(encoding));
	        out.flush();
	        out.close();

	        // 建立实际的连接
	        connection.connect();
	        // 获取所有响应头字段
	        Map<String, List<String>> headers = connection.getHeaderFields();
	        // 遍历所有的响应头字段
	        for (String key : headers.keySet()) {
	            System.err.println(key + "--->" + headers.get(key));
	        }
	        // 定义 BufferedReader输入流来读取URL的响应
	        BufferedReader in = null;
	        in = new BufferedReader(
	                new InputStreamReader(connection.getInputStream(), encoding));
	        String result = "";
	        String getLine;
	        while ((getLine = in.readLine()) != null) {
	            result += getLine;
	        }
	        in.close();
	        System.err.println("result:" + result);
	        return result;
	    }

	
}

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
httputil是一个常用的网络请求工具类,用于发送HTTP请求并获取响应。在使用httputil工具类发送请求时,可以通过设置请求的cookie来实现身份验证、会话管理等功能。 要设置cookie,首先需要创建一个HttpClient对象。HttpClient用于发送请求并获取响应。在创建HttpClient对象时,可以通过HttpClientBuilder类来设置一些自定义的配置,包括cookie的相关设置。 1. 创建HttpClient对象: ```java HttpClient httpClient = HttpClientBuilder.create().build(); ``` 2. 创建HttpPostHttpGet对象,设置请求URL和其他相关参数。 3. 设置cookie: ```java CookieStore cookieStore = new BasicCookieStore(); BasicClientCookie cookie = new BasicClientCookie("cookie_name", "cookie_value"); cookie.setDomain("example.com"); cookie.setPath("/"); cookieStore.addCookie(cookie); HttpContext httpContext = new BasicHttpContext(); httpContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore); ``` 这里创建了一个CookieStore对象,用于存储cookie。然后创建一个BasicClientCookie对象,设置cookie的名称和值。可以通过setDomain()和setPath()方法设置cookie的域和路径。将cookie添加到cookieStore中。 然后创建一个HttpContext对象,并将cookieStore设置为其属性。将HttpContext对象传递给HttpClient对象的execute()方法,执行请求。 4. 发送请求: ```java HttpResponse response = httpClient.execute(httpPost, httpContext); ``` 通过以上步骤,就可以使用httputil工具类发送带有cookie的HTTP请求了。在发送请求时,服务器将根据提供的cookie进行身份验证或会话管理。 需要注意的是,htttputil工具类的具体使用方式可能会因具体的框架和版本而有所不同,可以根据实际情况进行相应的调整。以上是一个基本的示例,供参考使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

散装程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值