网络连接底层工具类,执行get和post请求(用于在一个项目中去对另外项目发出请求)

来源:互联网 发布:韩熙雅什么直播软件 编辑:程序博客网 时间:2024/06/08 15:19
import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.StringWriter;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLEncoder;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import javax.activation.MimetypesFileTypeMap;/** * 网络连接底层类,执行get和post请求 * @author Shine_MuShi */public abstract class WebUtils {        private static final String DEFAULT_CHARSET ="utf-8";        private static final String METHOD_POST = "POST";        private static final String METHOD_GET = "GET";        private static final String USER_AGENT="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13";        private static final String CTYPE = "application/x-www-form-urlencoded;text/html;charset=" + DEFAULT_CHARSET;                public WebUtils() {                        }        /**         * 执行POST提交         * @parmaַ         * @param params         * @return         * @throws IOException         */        public static String doPost(String url, Map<String, String> params,int connectTimeout,int readTimeout) throws IOException {                String query=buildQuery(params, DEFAULT_CHARSET);                byte[] content=null;                if(query!=null){                        content=query.getBytes(DEFAULT_CHARSET);                }                return doPost(url, CTYPE, content, connectTimeout, readTimeout);        }                /**         * 执行POST提交         * @param url         * @param ctype         * @param content         * @param connectTimeout         * @param readTimeout         * @return         * @throws IOException         */        public static String doPost(String url, String ctype, byte[] content,int connectTimeout,int readTimeout) throws IOException {                HttpURLConnection conn = null;                OutputStream out = null;                String rsp = null;                try {                        try{                                conn = getConnection(new URL(url), METHOD_POST, ctype);                                 conn.setConnectTimeout(connectTimeout);                                conn.setReadTimeout(readTimeout);                                out = conn.getOutputStream();                                out.write(content);                                rsp = getResponseAsString(conn);                        }catch(IOException e){                                throw e;                        }                }finally {                        if (out != null) {                                out.close();                        }                        if (conn != null) {                                conn.disconnect();                        }                }                return rsp;        }                /**         * 执行GET提交         * @param url         * @return         * @throws IOException         */        public static String doGet(String url) throws IOException {                return doGet(url, DEFAULT_CHARSET);        }        public static String doGet(String url, String charset)                        throws IOException {                HttpURLConnection conn = null;                String rsp = null;                try {                        try{                                conn = getConnection(new URL(url), METHOD_GET, CTYPE);                                rsp = getResponseAsString(conn);                        }catch(IOException e){                                throw e;                        }                } finally {                        if (conn != null) {                                conn.disconnect();                        }                }                return rsp;        }                /**         * 获取URL连接         * @param url         * @param action         * @param ctype         * @return         * @throws IOException         */        private static HttpURLConnection getConnection(URL url, String action, String ctype)                        throws IOException {                HttpURLConnection conn = (HttpURLConnection) url.openConnection();                conn.setRequestMethod(action);                conn.setDoInput(true);                conn.setDoOutput(true);                conn.setRequestProperty("Accept", "text/xml,text/javascript,text/html");                conn.setRequestProperty("User-Agent", USER_AGENT);                conn.setRequestProperty("Content-Type", ctype);                return conn;        }                /**         * 响应流转为String         * @param conn         * @return         * @throws IOException         */        private static String getResponseAsString(HttpURLConnection conn) throws IOException {                String charset = getResponseCharset(conn.getContentType());                InputStream es = conn.getErrorStream();                if (es == null) {                        return getStreamAsString(conn.getInputStream(), charset);                }                return null;        }                /**         * 从流获取字符串         * @param stream         * @param charset         * @return         * @throws IOException         */        private static String getStreamAsString(InputStream stream, String charset) throws IOException {                try {                        BufferedReader reader = new BufferedReader(new InputStreamReader(stream, charset));                        StringWriter writer = new StringWriter();                        char[] chars = new char[256];                        int count = 0;                        while ((count = reader.read(chars)) > 0) {                                writer.write(chars, 0, count);                        }                        return writer.toString();                } finally {                        if (stream != null) {                                stream.close();                        }                }        }        /**         * 获取响应的字符编码         * @param ctype         * @return         */        private static String getResponseCharset(String ctype) {                String charset = DEFAULT_CHARSET;                if (ctype!=null) {                        String[] params = ctype.split(";");                        for (String param : params) {                                param = param.trim();                                if (param.startsWith("charset")) {                                        String[] pair = param.split("=", 2);                                        if (pair.length == 2) {                                                if (pair[1]!=null) {                                                        charset = pair[1].trim();                                                }                                        }                                        break;                                }                        }                }                return charset;        }                /**         * 绑定参数         * @param params         * @param charset         * @return         * @throws IOException         */        public static String buildQuery(Map<String, String> params, String charset) throws IOException {                if (params == null || params.isEmpty()) {                        return null;                }                StringBuilder query = new StringBuilder();                Set<Entry<String, String>> entries = params.entrySet();                boolean hasParam = false;                for (Entry<String, String> entry : entries) {                        String name = entry.getKey();                        String value = entry.getValue();                        if (name!=null&&value!=null) {                                if (hasParam) {                                        query.append("&");                                } else {                                        hasParam = true;                                }                                query.append(name).append("=").append(URLEncoder.encode(value, charset));                        }                }                return query.toString();        }        public static InputStream getStream(String url) throws IOException{        HttpURLConnection conn = null;        InputStream in = null;        try {         conn = getConnection(new URL(url), METHOD_GET, "application/octet-stream");         conn.setConnectTimeout(0);                 conn.setReadTimeout(0);                 in = conn.getInputStream();                 return in;} catch (Exception e) {System.out.println("出现异常");return null;}        }        /**         *           * @Description          * @param @param urlStr URL连接地址          * @param @param textMap 文件其他参数          * @param @param fileMap 文件流相关数据          * @param @return         * @throws IOException          * @throws              * @return         */        public static String formUpload(String urlStr, Map<String, String> textMap,                  Map<String, String> fileMap) throws IOException {              String res = "";              HttpURLConnection conn = null;              String BOUNDARY = "---------------------------pengliuUloadImage"; //boundary就是request头和上传文件内容的分隔符                  URL url = new URL(urlStr);                  conn = (HttpURLConnection) url.openConnection();                  conn.setConnectTimeout(0);                  conn.setReadTimeout(0);                  conn.setDoOutput(true);                  conn.setDoInput(true);                  conn.setUseCaches(false);                  conn.setRequestMethod("POST");                conn.setRequestProperty("Connection","Keep-Alive");                conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");                conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY);                  OutputStream out = new DataOutputStream(conn.getOutputStream());                // text                  if (textMap != null) {                    StringBuffer strBuf = new StringBuffer();                      Iterator iter = textMap.entrySet().iterator();                      while (iter.hasNext()) {                          Map.Entry entry = (Map.Entry) iter.next();                          String inputName = (String) entry.getKey();                          String inputValue = (String) entry.getValue();                          if (inputValue == null) {                              continue;                          }                          strBuf.append("\r\n").append("--").append(BOUNDARY).append(                                  "\r\n");                          strBuf.append("Content-Disposition: form-data; name=\""                                  + inputName + "\"\r\n\r\n");                        strBuf.append(inputValue);                      }                      out.write(strBuf.toString().getBytes());                }                // file                  if (fileMap != null) {                      Iterator iter = fileMap.entrySet().iterator();                      while (iter.hasNext()) {                          Map.Entry entry = (Map.Entry) iter.next();                          String inputName = (String) entry.getKey();                          String inputValue = (String) entry.getValue();                          if (inputValue == null) {                              continue;                          }                          File file = new File(inputValue);                          String filename = file.getName();                          String contentType = new MimetypesFileTypeMap()                                  .getContentType(file);                          if (filename.endsWith(".png")) {                              contentType = "image/png";                          }                          if (contentType == null || contentType.equals("")) {                              contentType = "multipart/form-data";                          }                                StringBuffer strBuf = new StringBuffer();                          strBuf.append("\r\n").append("--").append(BOUNDARY).append(                                  "\r\n");                          strBuf.append("Content-Disposition: form-data; name=\""                                  + inputName + "\"; filename=\"" + filename                                  + "\"\r\n");                          strBuf.append("Content-Type:" + contentType + "\r\n\r\n");                                out.write(strBuf.toString().getBytes());                                DataInputStream in = new DataInputStream(                                  new FileInputStream(file));                          int bytes = 0;                          byte[] bufferOut = new byte[1024];                          while ((bytes = in.read(bufferOut)) != -1) {                              out.write(bufferOut, 0, bytes);                          }                          in.close();                      }                  }                        byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();                  out.write(endData);                  out.flush();                  out.close();                        // 读取返回数据                  /*                StringBuffer strBuf = new StringBuffer();                  BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));                  String line = null;                  while ((line = reader.readLine()) != null) {                      strBuf.append(line).append("\n");                  }                  res = strBuf.toString();                  reader.close();                  reader = null;                  */                out = conn.getOutputStream();                String result=getResponseAsString(conn);                if (conn != null) {                      conn.disconnect();                      conn = null;                  }                 return result;                         }}调用api方式:<pre name="code" class="java"><span style="white-space:pre"></span>String path=SysconfigHelper.getProperty("pcVisited_baseUrl")+"action2/hsp-SaveHospitalCount.action";Map<String,String> params = new HashMap<String, String>();params.put("id",request.getParameter("id"));WebUtils.doPost(path, params, 0, 0);

                                             
0 0