工具类: http请求工具类

package com.jarvis.base.util;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 *   
 * 
 * @Title: HttpHelper.java
 * @Package com.jarvis.base.util
 * @Description:http请求工具类
 * @author Jack 
 * @date 2017年9月2日 下午3:34:49
 * @version V1.0  
 */
public class HttpHelper {

    private static final int DEFAULT_INITIAL_BUFFER_SIZE = 4 * 1024; // 4 kB

    private HttpHelper() {

    }

    /**
     * 返回对应URL地址的内容,注意,只返回正常响应(状态响应代码为200)的内容
     * 
     * @param urlPath
     *            需要获取内容的URL地址
     * @return 获取的内容字节数组
     */
    public static byte[] getURLContent(String urlPath) {
        HttpURLConnection conn = null;
        InputStream inStream = null;
        byte[] buffer = null;

        try {
            URL url = new URL(urlPath);
            HttpURLConnection.setFollowRedirects(false);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setDefaultUseCaches(false);
            conn.setConnectTimeout(10000); // 10秒
            conn.setReadTimeout(60000); // 60秒

            conn.connect();

            int repCode = conn.getResponseCode();
            if (repCode == 200) {
                inStream = conn.getInputStream();
                int contentLength = conn.getContentLength();
                buffer = getResponseBody(inStream, contentLength);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            System.err.println("获取内容失败");
        } finally {
            try {
                if (inStream != null) {
                    inStream.close();
                }

                if (conn != null) {
                    conn.disconnect();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
                System.err.println("关闭连接失败");
            }
        }
        return buffer;
    }

    /**
     * 描述:获取BODY部分的字节数组 时间:2010-9-7 下午03:16:46
     * 
     * @param instream
     * @param contentLength
     * @return
     * @throws Exception
     */
    private static byte[] getResponseBody(InputStream instream, int contentLength) throws Exception {
        if (contentLength == -1) {
            System.out.println("Going to buffer response body of large or unknown size. ");
        }
        ByteArrayOutputStream outstream = new ByteArrayOutputStream(
                contentLength > 0 ? (int) contentLength : DEFAULT_INITIAL_BUFFER_SIZE);
        byte[] buffer = new byte[4096];
        int len;
        while ((len = instream.read(buffer)) > 0) {
            outstream.write(buffer, 0, len);
        }
        outstream.close();
        return outstream.toByteArray();
    }

    @SuppressWarnings("unused")
    private static void readFixedLenToBuffer(InputStream inStream, byte[] buffer) throws Exception {
        int count = 0;
        int remainLength = buffer.length;
        int bufLength = buffer.length;
        int readLength = 0;
        do {
            count = inStream.read(buffer, readLength, remainLength);
            if (count == -1) // 已经到达末尾
            {
                if (readLength != bufLength) // 若实际读取的数据和需要读取的数据不匹配,则报错
                {
                    throw new Exception("读取数据出错,不正确的数据结束");
                }
            }

            readLength += count;

            if (readLength == bufLength) // 已经读取完,则返回
            {
                return;
            }

            remainLength = bufLength - readLength;
        } while (true);
    }

    /**
     * 返回对应URL地址的内容,注意,只返回正常响应(状态响应代码为200)的内容
     * 
     * @param urlPath
     *            需要获取内空的URL地址
     * @param charset
     *            字符集编码方式
     * @return 获取的内容字串
     */
    public static String getURLContent(String urlPath, String charset) {
        BufferedReader reader = null;
        HttpURLConnection conn = null;
        StringBuffer buffer = new StringBuffer();
        try {
            URL url = new URL(urlPath);
            HttpURLConnection.setFollowRedirects(false);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setDefaultUseCaches(false);
            conn.setConnectTimeout(10000); // 10秒
            conn.setReadTimeout(60000); // 60秒

            conn.connect();

            int repCode = conn.getResponseCode();
            if (repCode == 200) {
                int count = 0;
                char[] chBuffer = new char[1024];
                BufferedReader input = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset));
                while ((count = input.read(chBuffer)) != -1) {
                    buffer.append(chBuffer, 0, count);
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            System.err.println("获取内容失败");
        } finally {
            try {
                if (reader != null) {
                    reader.close();
                }
                if (conn != null) {
                    conn.disconnect();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
                System.err.println("关闭连接失败");
            }
        }

        return buffer.toString();
    }

    public static String getURLContent(String urlPath, String requestData, String charset) {
        BufferedReader reader = null;
        HttpURLConnection conn = null;
        StringBuffer buffer = new StringBuffer();
        OutputStreamWriter out = null;
        try {
            URL url = new URL(urlPath);
            conn = (HttpURLConnection) url.openConnection();

            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setDefaultUseCaches(false);
            conn.setConnectTimeout(10000); // 10秒
            conn.setReadTimeout(60000); // 60秒

            out = new OutputStreamWriter(conn.getOutputStream(), charset);
            out.write(requestData);
            out.flush();

            int repCode = conn.getResponseCode();
            if (repCode == 200) {
                int count = 0;
                char[] chBuffer = new char[1024];
                BufferedReader input = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset));
                while ((count = input.read(chBuffer)) != -1) {
                    buffer.append(chBuffer, 0, count);
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            System.err.println("获取内容失败");
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (reader != null) {
                    reader.close();
                }
                if (conn != null) {
                    conn.disconnect();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
                System.err.println("关闭连接失败");
            }
        }

        return buffer.toString();
    }
}

 

posted @ 2018-06-28 01:02  小推爱学习  阅读(371)  评论(0编辑  收藏  举报