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

com.github.kaizen4j.httpclient.HttpClientProxy Maven / Gradle / Ivy

package com.github.kaizen4j.httpclient;

import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR;
import static java.net.HttpURLConnection.HTTP_OK;

import com.google.common.base.Preconditions;
import java.io.IOException;
import java.util.Map;
import java.util.Objects;
import org.apache.commons.collections4.MapUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * HTTP 客户端代理类
 *
 * @author liuguowen
 */
public final class HttpClientProxy extends AbstractHttpClientProxy {

    private static final Logger logger = LoggerFactory.getLogger(HttpClientProxy.class);

    private CloseableHttpClient httpClient;

    HttpClientProxy(CloseableHttpClient httpClient) {
        this.httpClient = httpClient;
    }

    @Override
    protected HttpResult request(HttpRequestBase httpRequestBase, Map requestHeader) {
        Preconditions.checkNotNull(httpRequestBase, "HttpRequestBase must not be null");

        String method = httpRequestBase.getRequestLine().getMethod();
        logger.info("Send [{}] request url [{}]", method, httpRequestBase.getRequestLine().getUri());

        if (MapUtils.isNotEmpty(requestHeader)) {
            requestHeader.forEach(httpRequestBase::setHeader);
        }

        HttpResult httpResult = new HttpResult();

        try (CloseableHttpResponse httpResponse = httpClient.execute(httpRequestBase, HttpClientContext.create())) {

            HttpEntity responseEntity = httpResponse.getEntity();
            if (Objects.nonNull(responseEntity) && HTTP_OK == httpResponse.getStatusLine().getStatusCode()) {
                httpResult.setBody(EntityUtils.toString(responseEntity));
            }
            httpResult.setStatus(httpResponse.getStatusLine().getStatusCode());

        } catch (IOException e) {
            httpResult.setStatus(HTTP_INTERNAL_ERROR);
            httpResult.setBody(e.getMessage());
            logger.error("Send request [" + httpRequestBase.getRequestLine().getUri() + "] failed", e);
        } finally {
            /* 释放资源 */
            httpRequestBase.releaseConnection();
        }

        return httpResult;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy