All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hecloud.runtime.common.restful.ExtendRestClient Maven / Gradle / Ivy

package com.hecloud.runtime.common.restful;

import com.hecloud.runtime.common.enums.HttpMethod;
import com.hecloud.runtime.common.model.Result;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.FormBodyPartBuilder;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.util.Asserts;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.util.*;

/**
 * 扩展的HttpClient
 *
 * @author LoveinBJ
 */
public class ExtendRestClient extends RestClient {

    private static Logger logger = LoggerFactory.getLogger(ExtendRestClient.class);
    protected HttpEntity httpEntity = null;

    /**
     * 返回响应headers的get请求
     *
     * @param headers 请求头部
     * @param params  请求参数
     * @param uri     请求路径
     * @return 请求结果
     */
    public Result getWithHeaders(Map headers, Map params, String uri) {
        Asserts.notBlank(uri, "URI IS EMPTY!");
        logger.debug("Uri is{} and Param is {}", uri, params);
        uri = buildURL(uri, params);
        httpGet = new HttpGet(uri);
        buildHeader(httpGet, headers);
        httpGet.setConfig(config);
        processWithHeaders(httpGet);
        return result;
    }

    /**
     * 返回响应headers的post请求
     *
     * @param headers 请求头部
     * @param params  请求参数
     * @param uri     请求路径
     * @return 请求结果
     */
    public Result postWithHeaders(Map headers, Map params, String uri) {
        Asserts.notBlank(uri, "URI IS EMPTY!");
        httpPost = new HttpPost(uri);
        // 设置请求和传输超时时间
        httpPost.setConfig(config);
        logger.debug("uri is = {} | params is {}", uri, params);
        buildHeader(httpPost, headers);
        buildEntity(httpPost, params);
        processWithHeaders(httpPost);
        return result;
    }

    /**
     * 文件上传
     *
     * @param headers 请求头部
     * @param params  请求参数
     * @param file    上传文件
     * @param uri     请求路径
     * @param method  请求方法
     * @return 上传结果
     */
    public Result upload(Map headers, Map params, File file, String uri,
                         HttpMethod method) {
        Result result;
        switch (method) {
            case POST:
                result = postUpload(headers, params, file, uri);
                break;
            case PUT:
                result = putUpload(headers, params, file, uri);
                break;
            default:
                result = new Result(false, "方法暂不支持", "方法暂不支持");
                break;
        }
        return result;
    }

    /**
     * post方法文件上传
     *
     * @param headers 请求头部
     * @param params  请求参数
     * @param file    上传文件
     * @param uri     请求路径
     * @return 上传结果
     */
    public Result postUpload(Map headers, Map params, File file, String uri) {
        Asserts.notBlank(uri, "URI IS EMPTY!");
        httpPost = new HttpPost(uri);
        // 设置请求和传输超时时间
        httpPost.setConfig(config);
        buildHeader(httpPost, headers);
        params = Optional.ofNullable(params).orElse(new HashMap<>(1));
        MultipartEntityBuilder builder = MultipartEntityBuilder.create().setLaxMode();
        builder.addBinaryBody("file", file, ContentType.create("multipart/form-data", "UTF-8"), file.getName());
        Set keySet = params.keySet();
        for (String key : keySet) {
            builder.addPart(FormBodyPartBuilder.create().addField(key, params.get(key)).build());
        }
        httpEntity = builder.build();
        httpPost.setEntity(httpEntity);
        doPost();
        return result;
    }

    /**
     * put方法文件上传
     *
     * @param headers 请求头部
     * @param params  请求参数
     * @param file    上传文件
     * @param uri     请求路径
     * @return 上传结果
     */
    public Result putUpload(Map headers, Map params, File file, String uri) {
        Asserts.notBlank(uri, "URI IS EMPTY!");
        httpPut = new HttpPut(uri);
        // 设置请求和传输超时时间
        httpPut.setConfig(config);
        buildHeader(httpPut, headers);
        MultipartEntityBuilder builder = MultipartEntityBuilder.create().setLaxMode();
        InputStream inputStream;
        try {
            inputStream = new FileInputStream(file);
        } catch (FileNotFoundException e1) {
            logger.error("文件不存在!", e1);
            return new Result(false, "文件不存在", "文件不存在!");
        }
        builder.addBinaryBody("upload-file", inputStream, ContentType.APPLICATION_FORM_URLENCODED, file.getName());
        if (null != params) {
            Set keySet = params.keySet();
            for (String key : keySet) {
                builder.addPart(FormBodyPartBuilder.create().addField(key, params.get(key)).build());
            }
        }
        httpEntity = builder.build();
        httpPut.setEntity(httpEntity);
        try {
            response = httpClient.execute(httpPut);
            handleResponse();
        } catch (IOException e) {
            logger.error("RestClient Exception:", e);
            result = new Result(false, e.getMessage(), e.getMessage());
        } finally {
            if (null != inputStream) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    logger.error("InputStream close error!", e);
                }
            }
            close();
        }
        return result;
    }

    /**
     * 相同参数请求
     *
     * @param headers 请求头部
     * @param params  请求参数
     * @param uri     请求路径
     * @return 请求结果
     */
    public Result sameParamPost(Map headers, List params, String uri) {
        Asserts.notBlank(uri, "URI IS EMPTY!");
        logger.debug("uri is = {} | params is {}", uri, params);
        httpPost = new HttpPost(uri);
        // 设置请求和传输超时时间
        httpPost.setConfig(config);
        buildEntity(httpPost, params);
        buildHeader(httpPost, headers);
        doPost();
        return result;
    }


    void doPost() {
        try {
            response = httpClient.execute(httpPost);
            handleResponse();
        } catch (IOException e) {
            logger.error("RestClient Exception:", e);
            result = new Result(false, e.getMessage(), e.getMessage());
        } finally {
            close();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy