zoukankan      html  css  js  c++  java
  • HttpURLConnection 发送http请求帮助类

    java 利用HttpURLConnection 发送http请求

    提供GET / POST /上传文件/下载文件 功能

    import java.io.*;
    import java.net.*;
    import java.util.Iterator;
    import java.util.Map;
    
    import net.sf.jmimemagic.Magic;
    import net.sf.jmimemagic.MagicMatch;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * Author:   Administrator
     */
    public class HttpHelper {
    
        private final static Logger logger = LoggerFactory.getLogger(HttpHelper.class);
    
        /**
         * 发送get请求
         *
         * @param urlPath
         * @return
         */
        public static String get(String urlPath) {
    
            String res = "";
            HttpURLConnection conn = null;
            try {
                URL url = new URL(urlPath);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setConnectTimeout(5000);
                urlConnection.setReadTimeout(5000);
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();
                int code = urlConnection.getResponseCode();
    
                if (code == 200) {
                    InputStream inputStream = urlConnection.getInputStream();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                    String line;
                    StringBuffer buffer = new StringBuffer();
                    while ((line = bufferedReader.readLine()) != null) {
                        buffer.append(line);
    
                    }
                    res = buffer.toString();
    
                }
    
            } catch (Exception e) {
                logger.error("发送get请求出错");
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    conn.disconnect();
                    conn = null;
                }
            }
    
            return res;
        }
    
        /**
         * 发送post请求
         *
         * @param urlPath  http://host:port/test.jsp
         * @param postData name=abc&age=10
         * @throws Exception
         */
        public static String post(String urlPath, String postData) {
    
            HttpURLConnection conn = null;
            String res = "";
    
            try {
                //建立连接
                URL url = new URL(urlPath);
    
                conn = (HttpURLConnection) url.openConnection();
                //设置参数
                conn.setDoOutput(true);     //需要输出
                conn.setDoInput(true);      //需要输入
                conn.setUseCaches(false);   //不允许缓存
                conn.setRequestMethod("POST");      //设置POST方式连接
    
                //设置请求属性
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                conn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
                conn.setRequestProperty("Charset", "UTF-8");
    
                //连接,也可以不用明文connect,使用下面的httpConn.getOutputStream()会自动connect
                conn.connect();
    
                //建立输入流,向指向的URL传入参数
                DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
                dos.write(postData.getBytes("utf-8"));
                dos.flush();
                dos.close();
    
                //获得响应状态
                int resultCode = conn.getResponseCode();
                if (HttpURLConnection.HTTP_OK == resultCode) {
                    StringBuffer sb = new StringBuffer();
                    String readLine = new String();
                    BufferedReader responseReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                    while ((readLine = responseReader.readLine()) != null) {
                        sb.append(readLine).append("
    ");
                    }
                    responseReader.close();
                    res = sb.toString();
                }
            } catch (Exception e) {
                logger.error("发送POST请求出错。" + urlPath);
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    conn.disconnect();
                    conn = null;
                }
            }
    
            return res;
        }
    
        /**
         * 发送post 数据为json
         *
         * @param urlPath
         * @param Json
         * @return
         * @throws Exception
         */
        public static String postJson(String urlPath, String Json) {
    
            HttpURLConnection conn = null;
            String res = "";
    
            try {
                //建立连接
                URL url = new URL(urlPath);
                conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("POST");
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                conn.setRequestProperty("Connection", "Keep-Alive");
                conn.setRequestProperty("Charset", "UTF-8");
                // 设置文件类型:
                conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
                // 设置接收类型否则返回415错误
                //conn.setRequestProperty("accept","*/*")此处为暴力方法设置接受所有类型,以此来防范返回415;
                conn.setRequestProperty("accept", "application/json");
                // 往服务器里面发送数据
    
                byte[] writebytes = Json.getBytes();
                // 设置文件长度
                conn.setRequestProperty("Content-Length", String.valueOf(writebytes.length));
                OutputStream outwritestream = conn.getOutputStream();
                outwritestream.write(Json.getBytes("utf-8"));
                outwritestream.flush();
                outwritestream.close();
    
                if (conn.getResponseCode() == 200) {
                    StringBuffer sb = new StringBuffer();
                    String readLine = new String();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                    while ((readLine = bufferedReader.readLine()) != null) {
                        sb.append(readLine).append("
    ");
                    }
                    bufferedReader.close();
                    res = sb.toString();
                }
            } catch (Exception e) {
                logger.error("发送POST请求出错。" + urlPath);
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    conn.disconnect();
                    conn = null;
                }
            }
    
            return res;
        }
    
        /**
         * formupload方式提交数据
         *
         * @param urlPath
         * @param textMap 表单字段
         * @param fileMap 文件列表
         * @return
         */
        public static String formUpload(String urlPath, Map<String, String> textMap, Map<String, String> fileMap) {
            String res = "";
            HttpURLConnection conn = null;
            String BOUNDARY = "----lwm12345boundary"; //boundary就是request头和上传文件内容的分隔符
            try {
                URL url = new URL(urlPath);
                conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(30000);
                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<Map.Entry<String, String>> iter = textMap.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry<String, String> entry = iter.next();
                        String inputName = (String) entry.getKey();
                        String inputValue = (String) entry.getValue();
                        if (inputValue == null) {
                            continue;
                        }
                        strBuf.append("
    ").append("--").append(BOUNDARY).append("
    ");
                        strBuf.append("Content-Disposition: form-data; name="" + inputName + ""
    
    ");
                        strBuf.append(inputValue);
                    }
                    out.write(strBuf.toString().getBytes("utf-8"));
                }
    
                // file
                if (fileMap != null) {
                    Iterator<Map.Entry<String, String>> iter = fileMap.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry<String, String> 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();
                        MagicMatch match = Magic.getMagicMatch(file, false, true);
                        String contentType = match.getMimeType();
    
                        StringBuffer strBuf = new StringBuffer();
                        strBuf.append("
    ").append("--").append(BOUNDARY).append("
    ");
                        strBuf.append("Content-Disposition: form-data; name="" + inputName + ""; filename="" + filename + ""
    ");
                        strBuf.append("Content-Type:" + contentType + "
    
    ");
    
                        out.write(strBuf.toString().getBytes("utf-8"));
    
                        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 = ("
    --" + BOUNDARY + "--
    ").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("
    ");
                }
                res = strBuf.toString();
                reader.close();
                reader = null;
            } catch (Exception e) {
                logger.error("发送POST请求出错。" + urlPath);
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    conn.disconnect();
                    conn = null;
                }
            }
            return res;
        }
    
        /**
         * 发送下载文件请求
         *
         * @param urlPath
         * @param downloadDir
         * @return
         */
        public static File downloadFile(String urlPath, String downloadDir) {
            File file = null;
            try {
                // 统一资源
                URL url = new URL(urlPath);
                // 连接类的父类,抽象类
                URLConnection urlConnection = url.openConnection();
                // http的连接类
                HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
                // 设定请求的方法,默认是GET
                httpURLConnection.setRequestMethod("POST");
                // 设置字符编码
                httpURLConnection.setRequestProperty("Charset", "UTF-8");
                // 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。
                httpURLConnection.connect();
    
                // 文件大小
                int fileLength = httpURLConnection.getContentLength();
    
                // 文件名
                String filePathUrl = httpURLConnection.getURL().getFile();
                String fileFullName = filePathUrl.substring(filePathUrl.lastIndexOf(File.separatorChar) + 1);
    
                System.out.println("file length---->" + fileLength);
    
                URLConnection con = url.openConnection();
    
                BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream());
    
                String path = downloadDir + File.separatorChar + fileFullName;
                file = new File(path);
                if (!file.getParentFile().exists()) {
                    file.getParentFile().mkdirs();
                }
                OutputStream out = new FileOutputStream(file);
                int size = 0;
                int len = 0;
                byte[] buf = new byte[1024];
                while ((size = bin.read(buf)) != -1) {
                    len += size;
                    out.write(buf, 0, size);
                    // 打印下载百分比
                    // System.out.println("下载了-------> " + len * 100 / fileLength +
                    // "%
    ");
                }
                bin.close();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                return file;
            }
    
        }
    }

      

  • 相关阅读:
    深入理解DOM事件类型系列第四篇——剪贴板事件
    深入理解DOM事件机制系列第四篇——事件模拟
    利用select实现年月日三级联动的日期选择效果
    深入理解表单脚本系列第四篇——选择框脚本
    存储过程返回布尔值以及C#相关处理
    Type 'Insus.NET.PictureObject' in Assembly 'App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
    打开Windows10网络发现或是文件打印共享
    反射(Reflection)的SetValue遇上DBNULL转换为string
    MS SQL中使用UPDATE ... INNER JOIN ...
    Visual Studio 2015正式企业(Enterprise)版
  • 原文地址:https://www.cnblogs.com/liuxm2017/p/10869590.html
Copyright © 2011-2022 走看看