HttpUtil

package com.base.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;


public class HttpUtil {

    /**
     * <p>发送GET请求
     * @param  url GET请求地址
     * @return 与当前请求对应的响应内容字节数组
     *
     */
    public static String doGet(String url) {

        return HttpUtil.doGet(url , null , null , 0,"utf-8");
    }

    /**
     * <p>发送GET请求
     * @param  url       GET请求地址
     * @param  headerMap GET请求头参数容器
     * @return 与当前请求对应的响应内容字节数组
     */
    public static String doGet(String url , Map<String,String> headerMap, String charset) {

        return HttpUtil.doGet(url , headerMap , null , 0, charset);
    }

    /**
     * <p>发送GET请求
     * @param  url       GET请求地址
     * @param  proxyUrl  代理服务器地址
     * @param  proxyPort 代理服务器端口号
     * @return 与当前请求对应的响应内容字节数组  
     */
    public static String doGet(String url , String proxyUrl , int proxyPort, String charset) {

        return HttpUtil.doGet(url , null , proxyUrl , proxyPort, charset);
    }

    /**
     * <p>发送GET请求
     *
     * @param  url       GET请求地址
     * @param  headerMap GET请求头参数容器
     * @param  proxyUrl  代理服务器地址
     * @param  proxyPort 代理服务器端口号
     * @return 与当前请求对应的响应内容字节数组  
     */
    public static String doGet(String url , Map<String,String> headerMap , String proxyUrl , int proxyPort, String charset) {

        //byte[]     content    = null;
        HttpClient httpClient = new HttpClient();
        GetMethod  getMethod  = new GetMethod(url);
        getMethod.addRequestHeader("Content-type", "text/html; charset="+charset);
      

            //头部请求信息
            if (headerMap != null) {

                Iterator<Entry<String, String>> iterator = headerMap.entrySet().iterator();
                while (iterator.hasNext()) {

                    Entry<String,String> entry = (Entry<String,String>) iterator.next();
                    getMethod.addRequestHeader(entry.getKey().toString() , entry.getValue().toString());
                }
            }
     

        if (StringUtils.isNotBlank(proxyUrl)) {

            httpClient.getHostConfiguration().setProxy(proxyUrl , proxyPort);
        }

        //设置成了默认的恢复策略,在发生异常时候将自动重试3次,在这里你也可以设置成自定义的恢复策略
        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT , 10000);
        //postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER , new DefaultHttpMethodRetryHandler());
        InputStream inputStream = null;
        try {

            if (httpClient.executeMethod(getMethod) == HttpStatus.SC_OK) {

                //读取内容
                //inputStream = getMethod.getResponseBodyAsStream();
                //content     = IOUtils.toByteArray(inputStream);
                //content = getMethod.getResponseBodyAsString().getBytes(charset);
                
                
                InputStream ins = getMethod.getResponseBodyAsStream();
                //按指定的字符集构建文件流
                BufferedReader br = new BufferedReader(new InputStreamReader(ins,charset));
                StringBuilder sbf = new StringBuilder();
                String line = null;
                while ((line = br.readLine()) != null)
                {
                    sbf.append(line);
                }
                br.close();
                return sbf.toString();
            } else {
                System.err.println("Method failed: " + getMethod.getStatusLine());
            }
        } catch (IOException ex) {

            ex.printStackTrace();
        } finally {

            IOUtils.closeQuietly(inputStream);
            getMethod.releaseConnection();
        }
        return "";
    }

    /**
     * <p>发送POST请求
     * @param  url          POST请求地址
     * @param  parameterMap POST请求参数容器
     * @return 与当前请求对应的响应内容字节数组
     *
     */
    public static byte[] doPost(String url , Map<String,String> parameterMap) {

        return HttpUtil.doPost(url , null , parameterMap , null , null , 0);
    }

    /**
     * <p>发送POST请求
     *
     * @param  url          POST请求地址
     * @param  parameterMap POST请求参数容器
     * @param  paramCharset 参数字符集名称
     * @return 与当前请求对应的响应内容字节数组
     */
    public static byte[] doPost(String url , Map<String,String> parameterMap , String paramCharset) {

        return HttpUtil.doPost(url , null , parameterMap , paramCharset , null , 0);
    }

    /**
     * <p>发送POST请求
     *
     * @param  url          POST请求地址
     * @param  headerMap    POST请求头参数容器
     * @param  parameterMap POST请求参数容器
     * @param  paramCharset 参数字符集名称
     * @return 与当前请求对应的响应内容字节数组
     */
    public static byte[] doPost(String url , Map<String,String> headerMap , Map<String,String> parameterMap , String paramCharset) {

        return HttpUtil.doPost(url , headerMap , parameterMap , paramCharset , null , 0);
    }

    /**
     * <p>发送POST请求
     *
     * @param  url          POST请求地址
     * @param  parameterMap POST请求参数容器
     * @param  paramCharset 参数字符集名称
     * @param  proxyUrl     代理服务器地址
     * @param  proxyPort    代理服务器端口号
     * @return 与当前请求对应的响应内容字节数组
     *
     */
    public static byte[] doPost(String url , Map<String,String> parameterMap , String paramCharset , String proxyUrl , int proxyPort) {

        return HttpUtil.doPost(url , null , parameterMap , paramCharset , proxyUrl , proxyPort);
    }

    /**
     * <p>发送POST请求
     *
     * @param  url          POST请求地址
     * @param  headerMap    POST请求头参数容器
     * @param  parameterMap POST请求参数容器
     * @param  paramCharset 参数字符集名称
     * @param  proxyUrl     代理服务器地址
     * @param  proxyPort    代理服务器端口号
     * @return 与当前请求对应的响应内容字节数组
     */
    public static byte[] doPost(String url , Map<String,String> headerMap , Map<String,String> parameterMap , String paramCharset , String proxyUrl , int proxyPort) {

        byte[]     content    = null;
        HttpClient httpClient = new HttpClient();
        PostMethod postMethod = new PostMethod(url);

        if (StringUtils.isNotBlank(paramCharset)) {
            postMethod.getParams().setContentCharset(paramCharset);
            postMethod.getParams().setHttpElementCharset(paramCharset);
        }

        if (headerMap != null) {
            //头部请求信息
            if (headerMap != null) {

                Iterator<Entry<String, String>> iterator = headerMap.entrySet().iterator();
                while (iterator.hasNext()) {

                    Entry<String,String> entry = (Entry<String,String>) iterator.next();
                    postMethod.addRequestHeader(entry.getKey().toString() , entry.getValue().toString());
                }
            }
        }

        if (parameterMap!=null) {
            Iterator<String> iterator = parameterMap.keySet().iterator();
            while (iterator.hasNext()) {

                String key = (String) iterator.next();
                postMethod.addParameter(key , (String) parameterMap.get(key));
            }
        }        

        if (StringUtils.isNotBlank(proxyUrl)) {

            httpClient.getHostConfiguration().setProxy(proxyUrl , proxyPort);
        }

        //设置成了默认的恢复策略,在发生异常时候将自动重试3次,在这里你也可以设置成自定义的恢复策略
        postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT , 10000);
        //postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER , new DefaultHttpMethodRetryHandler());
        InputStream inputStream = null;
        try {

            if (httpClient.executeMethod(postMethod) == HttpStatus.SC_OK) {

                //读取内容
                inputStream = postMethod.getResponseBodyAsStream();
                content     = IOUtils.toByteArray(inputStream);
            } else {

                System.err.println("Method failed: " + postMethod.getStatusLine());
            }
        } catch (IOException ex) {

            ex.printStackTrace();
        } finally {

            IOUtils.closeQuietly(inputStream);
            postMethod.releaseConnection();
        }
        return content;
    }
    
    public static void main(String[] args) {
     
    }

}

                   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值