HttpUtils-HttpClient3

HttpClient3 版本的代码,留作纪念,供学习使用。

 

因为是应用层的代码,写法通常需要配合其他工具包

其中cn.seaboot包下的代码,是个人代码封装,功能与函数名同,apache-common中通常有类似函数

 

        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>

 

 

package cn.seaboot.common.net;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethodBase;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpMethodParams;

import cn.seaboot.common.bean.P;
import cn.seaboot.common.core.CommonUtils;
import cn.seaboot.common.exception.BizException;

/**
 * HttpClient半封装
 * @author ChenSS 2018年12月20日 下午5:09:36
 */
public class HttpClientUtils {
    /**
     * 默认配置
     */
    @SuppressWarnings("deprecation")
    public static HttpClient getDefaultHttpClient() {
        HttpClientParams defHttpClientParams = new HttpClientParams();
        defHttpClientParams.setConnectionManagerTimeout(P.HTTP_CONNECT_TIMEOUT);
        defHttpClientParams.setSoTimeout(P.HTTP_RESPONSE_TIMEOUT);
        defHttpClientParams.setContentCharset(Charset.defaultCharset().name());
        defHttpClientParams.setParameter(HttpMethodParams.RETRY_HANDLER,
                new DefaultHttpMethodRetryHandler(P.HTTP_MAX_RETRY_COUNT, false));
        defHttpClientParams.setCookiePolicy(CookiePolicy.IGNORE_COOKIES);

        //没特殊的需求,过时的函数较优
        MultiThreadedHttpConnectionManager defConnManager = new MultiThreadedHttpConnectionManager();
        defConnManager.setMaxTotalConnections(P.HTTP_MAX_TOTAL_CONNECTION);
        defConnManager.setMaxConnectionsPerHost(P.HTTP_MAX_CONNECTION_PER_HOST);
        return new HttpClient(defHttpClientParams, defConnManager);
    }

    /**
     * Get
     */
    public static GetMethod getGetMethod(String url) {
        GetMethod get = new GetMethod(url);
        get.setRequestHeader("Connection", "close");
        return get;
    }

    /**
     * Post
     */
    public static PostMethod getPostMethod(String url) {
        PostMethod post = new PostMethod(url);
        post.setRequestHeader("Connection", "close");
        return post;
    }

    /**
     * 添加请求参数
     */
    public static void setMethodParams(HttpMethodBase method, String queryString) {
        method.setQueryString(queryString);
    }

    /**
     * 添加请求参数
     */
    public static void setMethodParams(HttpMethodBase method, Map<String, Object> queryString) {
        if (CommonUtils.isEmpty(queryString)) {
            return;
        }
        NameValuePair[] pair = new NameValuePair[queryString.size()];
        int idx = 0;
        for (Entry<String, Object> entry : queryString.entrySet()) {
            pair[idx++] = new NameValuePair(entry.getKey(), entry.getValue().toString());
        }
        method.setQueryString(pair);
    }

    /**
     * 发送请求
     */
    public static void excuteMethod(HttpClient client, HttpMethodBase method) throws HttpException, IOException{
        int code = client.executeMethod(method);
        if (code != HttpStatus.SC_OK) {
            throw new BizException("Request response error:" + code);
        }
    }

    /**
     * 发送IO流
     * @param client
     * @param method
     * @param is
     */
    public static void doPostInputStream(HttpClient client, PostMethod method, InputStream is) throws HttpException, IOException{
        method.setRequestEntity(new InputStreamRequestEntity(is));
        excuteMethod(client, method);
    }

    /**
     * 多文件请求
     * @param client
     * @param url
     * @param params
     * @param files
     */
    public static void doPostMultipartFile(HttpClient client, String url, HttpMethodParams params, File... files) throws HttpException, IOException{
        PostMethod method = new PostMethod(url);
        Part[] parts = new Part[files.length];
        File file;
        for (int i = 0; i < parts.length; i++) {
            file = files[i];
            parts[i] = new FilePart(file.getName(), file);
        }
        MultipartRequestEntity entity = new MultipartRequestEntity(parts, params);
        method.setRequestEntity(entity);
        excuteMethod(client, method);
    }

    /**
     * 多文件请求
     * @param client
     * @param url
     * @param params
     * @param file
     * @throws HttpException -
     * @throws IOException -
     */
    public static void doPostMultipartFile(HttpClient client, String url, HttpMethodParams params, File file) throws HttpException, IOException{
        PostMethod method = new PostMethod(url);
        Part parts = new FilePart(file.getName(), file);
        MultipartRequestEntity entity = new MultipartRequestEntity(new Part[]{parts}, params);
        method.setRequestEntity(entity);
        excuteMethod(client, method);
    }
}

 

package cn.seaboot.plugin.util;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;

import cn.seaboot.common.core.Now;
import cn.seaboot.common.net.HttpClientUtils;

/**
 * 发送POST请求
 * @author ChenSS 2019年1月7日 下午4:23:20
 */
public class HttpUtils {
    public static final HttpClient HTTP_CLIENT = HttpClientUtils.getDefaultHttpClient();

    /**
     * 发送post请求
     * @param url
     * @param content 发送字符串内容XML
     */
    public static byte[] doWftPost(String url, String content) throws HttpException, IOException {
        PostMethod method = HttpClientUtils.getPostMethod(url);
        method.setRequestHeader("Content-Type", "text/xml;utf-8");
        method.setRequestEntity(new StringRequestEntity(content, null, "UTF-8"));
        HttpClientUtils.excuteMethod(HTTP_CLIENT, method);
        return method.getResponseBody();
    }
    
    
    /**
     * 发送post请求
     * @param url
     * @param content 发送字符串内容XML
     */
    public static String doHkPost(String url, String content) throws HttpException, IOException {
        PostMethod method = HttpClientUtils.getPostMethod(url);
        method.setRequestHeader("Content-Type", "application/json;utf-8");
        method.setRequestEntity(new StringRequestEntity(content, null, "UTF-8"));
        HttpClientUtils.excuteMethod(HTTP_CLIENT, method);
        return method.getResponseBodyAsString();
    }
    
    
    /**
     * 发送post请求
     * @param url
     */
    public static String doPost(String url, Map<String,Object> map) throws HttpException, IOException {
        PostMethod method = HttpClientUtils.getPostMethod(url);
        HttpClientUtils.setMethodParams(method, map);
        HttpClientUtils.excuteMethod(HTTP_CLIENT, method);
        return method.getResponseBodyAsString();
    }
    
    public static void main(String[] args) throws IOException {g";
            PostMethod method = HttpClientUtils.getPostMethod(url);
//            method.setRequestHeader("Content-Type", "application/json;utf-8");
            Map<String,Object> map = new HashMap<>(); 
            map.put("uid",1);  
            map.put("userId",1);  
            map.put("msg","----------------");  
            map.put("createDate",Now.dateTime());  
            HttpClientUtils.setMethodParams(method, map);
//            HttpClientUtils.setMethodParams(method, "content='www.baidu.com'&imgExtName='jpg'&size='5'");
            HttpClientUtils.excuteMethod(HTTP_CLIENT, method);
            System.out.println(method.getResponseBodyAsString());
    }
}

 

posted on 2019-11-10 16:32  疯狂的妞妞  阅读(524)  评论(0编辑  收藏  举报

导航