http请求工具类

简单的http请求,短连接,请求完成之后就结束了,


import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.*;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.FormBodyPart;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.*;
import java.util.Map.Entry;

/**
 * @author rdd 2018.03.13
 */
public class HttpUtils {

    public static final String charset = "utf-8";

    public static final int JS_TIME_OUT = 6000;

    /**
     * 不带参数的post请求,用的很少
     *
     * @param myURL
     * @return
     */
    public static String doPostUrl(String myURL) {
        URL url;
        try {
            url = new URL(myURL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(JS_TIME_OUT);
            conn.setReadTimeout(JS_TIME_OUT);
            conn.setRequestMethod("POST");// 提交模式
            // 是否允许输入输出
            conn.setDoInput(true);
            conn.setDoOutput(true);
            // 设置请求头里面的数据,以下设置用于解决http请求code415的问题
            conn.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
            // 链接地址
            conn.connect();
            OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
            // 发送参数
            // 清理当前编辑器的左右缓冲区,并使缓冲区数据写入基础流
            writer.flush();
            int code = conn.getResponseCode();
            BufferedReader reader = null;
            if (code == 200) {
//                is = conn.getInputStream(); // 得到网络返回的输入流
                reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            } else {
//                is = conn.getErrorStream(); // 得到网络返回的输入流
                reader = new BufferedReader(new InputStreamReader(conn.getErrorStream(), "UTF-8"));
            }
//            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String lines = reader.readLine();
            reader.close();
            return lines;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    private static String getSortURL(TreeMap<String, Object> mp, String head) {
        try {
            String url = "";
            Iterator<String> it = mp.keySet().iterator();
            StringBuffer sb = new StringBuffer();
            while (it.hasNext()) {
                Object key = it.next();
                url = url + key + "=" + URLEncoder.encode(mp.get(key).toString(), charset) + "&";
                sb.append("|").append(mp.get(key));
            }
            return head + "?" + url;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    private static String postForm(String reqURL, TreeMap<String, Object> params) {
        CloseableHttpClient httpclient = HttpClients.custom().build();
        try {
            RequestBuilder builder = RequestBuilder.post(reqURL);
            builder.setCharset(Charset.forName(charset));
            MultipartEntity httpEntity = new MultipartEntity();
            if (params != null) {
                for (Entry<String, Object> entry : params.entrySet()) {
                    FormBodyPart formBodyPart = new FormBodyPart(entry.getKey(),
                            new StringBody(String.valueOf(entry.getValue()), "text/plain", Charset.forName(charset)));
                    httpEntity.addPart(formBodyPart);
                }
            }
            builder.setEntity(httpEntity);
            HttpUriRequest post = builder.build();
            CloseableHttpResponse response = httpclient.execute(post);
            try {
                HttpEntity entity = response.getEntity();
                Charset respCharset = ContentType.getOrDefault(entity).withCharset(charset).getCharset();
                String result = EntityUtils.toString(entity, respCharset);
                EntityUtils.consume(entity);
                return result;
            } finally {
                response.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                httpclient.close();
            } catch (IOException e) {
            }
        }
        return null;
    }

    private static String getMD5(String str) {
        try {
            return DigestUtils.md5Hex(str);
        } catch (Exception e) {
            throw new RuntimeException("MD5加密出现错误");
        }
    }


    /**
     * post请求(用于key-value格式的参数)
     *
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, Map params) {
        BufferedReader in = null;
        try {
            // 定义HttpClient
            HttpClient client = new DefaultHttpClient();
            // 实例化HTTP方法
            HttpPost request = new HttpPost();
            request.setURI(new URI(url));
            //设置参数
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            for (Iterator iter = params.keySet().iterator(); iter.hasNext(); ) {
                String name = (String) iter.next();
                String value = String.valueOf(params.get(name));
                nvps.add(new BasicNameValuePair(name, value));

                //System.out.println(name +"-"+value);
            }
            request.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

            HttpResponse response = client.execute(request);
            int code = response.getStatusLine().getStatusCode();
            if (code == 200) {    //请求成功
                in = new BufferedReader(new InputStreamReader(response.getEntity()
                        .getContent(), "utf-8"));
                StringBuffer sb = new StringBuffer("");
                String line = "";
                String NL = System.getProperty("line.separator");
                while ((line = in.readLine()) != null) {
                    sb.append(line + NL);
                }

                in.close();

                return sb.toString();
            } else {    //
                System.out.println("状态码:" + code);
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();

            return null;
        }
    }

    /**
     * post请求(用于请求json格式的参数)
     *
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, String params) throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);// 创建httpPost
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-Type", "application/json");
        String charSet = "UTF-8";
        StringEntity entity = new StringEntity(params, charSet);
        httpPost.setEntity(entity);
        CloseableHttpResponse response = null;
        try {
            response = httpclient.execute(httpPost);
            StatusLine status = response.getStatusLine();
            int state = status.getStatusCode();
            if (state == HttpStatus.SC_OK) {
                HttpEntity responseEntity = response.getEntity();
                String jsonString = EntityUtils.toString(responseEntity);
                return jsonString;
            } else {
//                logger.error("请求返回:"+state+"("+url+")");
            }
        } finally {
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

}

有时候请求使用长连接的话更加省资源,长连接请求.长连接工具类

posted @ 2018-11-03 22:45  你就像甜甜的益达  阅读(146)  评论(0编辑  收藏  举报