美文网首页
HttpRequestUtil

HttpRequestUtil

作者: 咖啡机an | 来源:发表于2018-12-25 12:01 被阅读0次
    import java.io.BufferedReader;
    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.PrintWriter;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.Map;
    
    
    /**
     * Http请求数据
     * HttpClient
      */
    public class HttpRequestUtil {
        private static final Logger LOG = Logger.getLogger(HttpRequestUtil.class);
    
        /**
         * 请求数据
         *
         * @param httpUrl 请求url
         * @param params  请求参数可变
         * @return
         */
        public static String requestData(String httpUrl, String... params) {
            BufferedReader in = null;
            //http请求地址
            StringBuffer http = new StringBuffer();
            //http地址主体
            http.append(httpUrl).append("?");
            int index = 0;
            //http地址参数
            for (String param : params) {
                if (!StringUtils.isEmpty(param)) {
                    if (index > 0) {
                        http.append("&").append(param);
                    } else {
                        http.append(param);
                    }
                }
    
                index++;
            }
            //LOG.info("请求地址:"+http.toString());
            //请求返回的结果字符串
            StringBuilder json = new StringBuilder();
            try {
                URL data = new URL(http.toString());
                URLConnection urlConnection = data.openConnection();
                in = new BufferedReader(new InputStreamReader(
                        urlConnection.getInputStream(), "UTF8"));
                String inputLine = null;
                while ((inputLine = in.readLine()) != null) {
                    json.append(inputLine);
                }
                in.close();
            } catch (MalformedURLException e) {
                LOG.info("error:" + e);
            } catch (IOException e) {
                LOG.info("error:" + e);
            } finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            return json.toString();
        }
    
    
        public static String postData(String httpUrl, Map<String, String> paramMap) throws Exception {
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(httpUrl);
                // 打开和URL之间的连接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的请求属性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 获取URLConnection对象对应的输出流
                out = new PrintWriter(conn.getOutputStream());
                // 发送请求参数
                int index = 0;
                StringBuffer param = new StringBuffer();
                for (Map.Entry entity : paramMap.entrySet()) {
                    if (index > 0) {
                        param.append("&");
                    }
                    param.append(entity.getKey()).append("=").append(entity.getValue());
                    index++;
                }
    
                out.print(param);
                // flush输出流的缓冲
                out.flush();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream(), "UTF8"));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送 POST 请求出现异常!" + e);
                e.printStackTrace();
            }
            //使用finally块来关闭输出流、输入流
            finally {
                try {
                    if (out != null) {
                        out.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            return result;
        }
    
        public static String httpUrlConnetionGet(String httpUrl, String... params) {
            StringBuffer stringBuffer = null;
            try {
                //创建URL对象
                //http请求地址
                StringBuffer http = new StringBuffer();
                //http地址主体
                http.append(httpUrl).append("?");
                int index = 0;
                //http地址参数
                for (String param : params) {
                    if (!StringUtils.isEmpty(param)) {
                        if (index > 0) {
                            http.append("&").append(param);
                        } else {
                            http.append(param);
                        }
                    }
                    index++;
                }
                URL url = new URL(http.toString().replace(" ", "%20"));
                //返回一个URLConnection对象,它表示到URL所引用的远程对象的连接
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                //在这里设置一些属性,详细见UrlConnection文档,HttpURLConnection是UrlConnection的子类
                //设置连接超时为5秒
                httpURLConnection.setConnectTimeout(5000);
                //设定请求方式(默认为get)
                httpURLConnection.setRequestMethod("GET");
                //建立到远程对象的实际连接
                httpURLConnection.connect();
                //返回打开连接读取的输入流,输入流转化为StringBuffer类型,这一套流程要记住,常用
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), "UTF8"));
                String line = null;
                stringBuffer = new StringBuffer();
                while ((line = bufferedReader.readLine()) != null) {
                    //转化为UTF-8的编码格式
                    //line = new String(line.getBytes("UTF-8"));
                    stringBuffer.append(line);
                }
                bufferedReader.close();
                httpURLConnection.disconnect();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (stringBuffer == null) {
                return "";
            } else {
                return stringBuffer.toString();
            }
        }
    
        public static String postFile(String actionUrl, Map<String, String> headParams, Map<String, String> params,
                                      Map<String, File> files) throws IOException {
            BufferedReader in = null;
            DataOutputStream outStream = null;
            String result = "";
            String BOUNDARY = java.util.UUID.randomUUID().toString();
            String PREFIX = "--", LINEND = "\r\n";
            String MULTIPART_FROM_DATA = "multipart/form-data";
            String CHARSET = "UTF-8";
            try {
                URL uri = new URL(actionUrl);
                HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
                conn.setReadTimeout(30 * 1000);
                conn.setDoInput(true);
                conn.setDoOutput(true);
                conn.setUseCaches(false);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("connection", "keep-alive");
                conn.setRequestProperty("Charsert", "UTF-8");
                conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);
                if (headParams != null) {
                    for (String key : headParams.keySet()) {
                        conn.setRequestProperty(key, headParams.get(key));
                    }
                }
                StringBuilder sb = new StringBuilder();
                if (params != null) {
                    // 首先组拼文本类型的参数
                    for (Map.Entry<String, String> entry : params.entrySet()) {
                        sb.append(PREFIX);
                        sb.append(BOUNDARY);
                        sb.append(LINEND);
                        sb.append("Content-Disposition: form-data; name=\""
                                + entry.getKey() + "\"" + LINEND);
                        sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
                        sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
                        sb.append(LINEND);
                        sb.append(entry.getValue());
                        sb.append(LINEND);
                    }
                }
                outStream = new DataOutputStream(conn.getOutputStream());
                if (!StringUtils.isEmpty(sb.toString())) {
                    outStream.write(sb.toString().getBytes());
                }
                // 发送文件数据
                if (files != null) {
                    for (Map.Entry<String, File> file : files.entrySet()) {
                        StringBuilder sb1 = new StringBuilder();
                        sb1.append(PREFIX);
                        sb1.append(BOUNDARY);
                        sb1.append(LINEND);
                        sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""
                                + file.getKey() + "\"" + LINEND);
                        sb1.append("Content-Type: application/octet-stream; charset="
                                + CHARSET + LINEND);
                        sb1.append(LINEND);
                        outStream.write(sb1.toString().getBytes());
    
                        InputStream is = new FileInputStream(file.getValue());
                        byte[] buffer = new byte[1024];
                        int len = 0;
                        while ((len = is.read(buffer)) != -1) {
                            outStream.write(buffer, 0, len);
                        }
    
                        is.close();
                        outStream.write(LINEND.getBytes());
                    }
                }
                // 请求结束标志
                byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
                outStream.write(end_data);
                outStream.flush();
    
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream(), "UTF8"));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (outStream != null) {
                        outStream.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            return result;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:HttpRequestUtil

          本文链接:https://www.haomeiwen.com/subject/uutflqtx.html