通用的HTTP请求类
来源:互联网 发布:火车票网络订单号查询 编辑:程序博客网 时间:2024/05/16 18:34
package cn.zytx.common.http;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.net.ssl.HttpsURLConnection;import java.io.*;import java.net.HttpURLConnection;import java.net.ProtocolException;import java.net.URLEncoder;import java.util.Iterator;import java.util.Map;public class HttpUtil { public static final int CONNECT_TIMEOUT = 15000; public static final int READ_TIMEOUT = 15000; public static final String POST_MEGHOD = "POST"; public static final String GET_MEGHOD = "GET"; private static final String FORM_URLENCODED = "application/x-www-form-urlencoded;charset=UTF-8"; private static final Logger logger = LoggerFactory.getLogger(HttpUtil.class); public static String getHttp(String actionName) throws Exception{ return getHttp(actionName,null,null); } /** * HTTP GET * @param actionName URL,可以帶參數 * @param params 參數列表,可以为 null * @return * @throws Exception */ public static String getHttp(String actionName, Map<String, String> params) throws Exception{ return getHttp(actionName,params,null); } /** * HTTP GET * @param actionName URL,可以帶參數 * @param params 參數列表,可以为 null * @param headers HTTP header 可以为 null * @return * @throws Exception */ public static String getHttp(String actionName, Map<String, String> params,Map<String,String> headers) throws Exception{ String paramString = contactMap(params); String url = actionName; if(!"".equals(paramString)) { url = actionName.contains("?") ? actionName + "&" + paramString//如果包含?,則直接追加 : actionName + "?" + paramString;//不包含?,則用?追加 } HttpURLConnection connect = (HttpURLConnection)new java.net.URL(url).openConnection(); setConnectProperty(connect, GET_MEGHOD,null,headers); connect.connect(); return getReturnMsg(connect); } /** * HTTP POST * @param actionName * @param params * @return * @throws IOException */ public static String postHttp(String actionName, Map<String, String> params) throws IOException { return postHttp(actionName,params,null); } /** * HTTP POST * @param actionName * @param params * @param headers * @return * @throws IOException */ public static String postHttp(String actionName, Map<String, String> params,Map<String,String> headers) throws IOException { HttpURLConnection connect = (HttpURLConnection)new java.net.URL(actionName).openConnection(); setConnectProperty(connect,POST_MEGHOD,FORM_URLENCODED,headers); String paramString = contactMap(params); writeContent(connect,paramString); connect.connect(); return getReturnMsg(connect); } public static String postHttp(String actionName, String body, String contentType) throws Exception{ return postHttp(actionName,body,contentType,null); } /** * * @param actionName * @param body * @param contentType * @param headers * @return * @throws Exception */ public static String postHttp(String actionName, String body, String contentType,Map<String,String> headers) throws Exception{ HttpURLConnection connect = (HttpURLConnection)new java.net.URL(actionName).openConnection(); setConnectProperty(connect,POST_MEGHOD,contentType, headers); writeContent(connect,body); connect.connect(); return getReturnMsg(connect); } public static String postHttps(String actionName, String body, String contentType) throws Exception{ return postHttps(actionName,body,contentType,null); } /** * HTTPS POST (HttpsURLConnection)说明只要URL是https的,自动打开的就是https,所以其实不用postHttps相关方法 * @param actionName * @param body * @param contentType * @param headers * @return * @throws Exception */ public static String postHttps(String actionName, String body, String contentType,Map<String,String> headers) throws Exception{ HttpsURLConnection connect = (HttpsURLConnection)new java.net.URL(actionName).openConnection(); setConnectProperty(connect,POST_MEGHOD, contentType,headers); writeContent(connect,body); connect.connect(); return getReturnMsg(connect); } /** * key1=value1&key2=value2,如果value=null 或者 size=0 返回 "" * @param value * @return * @throws UnsupportedEncodingException */ private static String contactMap(Map<String, String> value) throws UnsupportedEncodingException { if(null == value){return "";} String params = ""; Iterator<String> iterator = value.keySet().iterator(); while(iterator.hasNext()){ String key = iterator.next().toString(); params += key + "=" + URLEncoder.encode(value.get(key), "UTF8") + "&"; } if(params.length() > 0){ params = params.substring(0, params.length() - 1); } return params; } private static void writeContent(HttpURLConnection connect, String data) throws IOException { PrintWriter out = new PrintWriter(connect.getOutputStream()); out.print(data); out.flush(); out.close(); } private static void setConnectProperty(HttpURLConnection connect, String method, String contentType, Map<String,String> headers) throws ProtocolException { connect.setRequestMethod(method); connect.setDoOutput(true); connect.setUseCaches(false); if(null != contentType){ connect.setRequestProperty("Content-Type", contentType); } if(null != headers) { headers.forEach((key, value) -> connect.setRequestProperty(key, value)); } connect.setConnectTimeout(CONNECT_TIMEOUT); connect.setReadTimeout(READ_TIMEOUT); } private static String getReturnMsg(HttpURLConnection connect) throws IOException { if( HttpURLConnection.HTTP_OK == connect.getResponseCode()){ InputStream is = connect.getInputStream(); ByteArrayOutputStream bytestream = new ByteArrayOutputStream(); int ch; while((ch = is.read()) != -1){ bytestream.write(ch); } is.close(); connect.disconnect(); byte[] result = bytestream.toByteArray(); return new String(result); } else{ String err = errMessage(connect); logger.error(err); throw new RuntimeException(connect.getResponseCode() + ""); } } private static String errMessage(HttpURLConnection connect) throws IOException { //如果服务器返回的HTTP状态不是HTTP_OK,则表示发生了错误,此时可以通过如下方法了解错误原因。 InputStream is = connect.getErrorStream(); //通过getErrorStream了解错误的详情 InputStreamReader isr = new InputStreamReader(is,"utf-8"); BufferedReader in = new BufferedReader(isr); String inputLine; StringWriter bw = new StringWriter(); while ((inputLine = in.readLine()) != null) { bw.write(inputLine); bw.write("\n"); } bw.close(); in.close(); return bw.getBuffer().toString(); } public static void main(String[] args) throws Exception{ String s = getHttp("https://www.hao123.com/"); System.out.println(s); }}
阅读全文
0 0
- 通用的HTTP请求类
- HTTP请求格式,C++传参数,C,C++,VC++,window的HTTP请求通用
- Windows Phone 通用HTTP请求类,很好用!
- Http请求的工具类
- Http请求的工具类
- vc++实现http下载的通用类
- vc++实现http下载的通用类
- vc++实现http下载的通用类
- C# 调用http和https请求rest接口通用操作类
- Http 的post请求的工具类
- Java Http请求工具类和接收请求的方法
- 有关HTTP请求的辅助类
- 封装一个HTTP请求的辅助类
- 用于处理HTTP请求的工具类
- Android 封装http请求的工具类
- 请求Http链接的封装类
- Android 封装http请求的工具类
- Android 封装http请求的工具类
- 你应该要懂的宇宙真相——《给忙碌者的天体物理学 》下篇
- Cookie和Session的作用,cookie、Session工作原理
- 简单html笔记
- c++_vector_初探1
- ESP 8266 nodemcu 入过的坑
- 通用的HTTP请求类
- HDU 1671 字典树
- IDEA文件颜色说明
- OpenStack中GET请求 fixed_ips传参方式解决思路
- vue 2.0开发项目中stylus 的配置和使用
- SCCM 2012 R2 实战系列(十)—统一部署Office
- D3.js实现线性折线图
- 能自学成为WEB前端工程师吗?
- Ubuntu系统误删内核无限进入Memtest+86问题解决