美文网首页
Protohttp 请求

Protohttp 请求

作者: test_java | 来源:发表于2019-05-09 08:55 被阅读0次
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpHost;
    import org.apache.http.StatusLine;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpUriRequest;
    import org.apache.http.client.methods.RequestBuilder;
    import org.apache.http.conn.routing.HttpRoute;
    import org.apache.http.entity.ByteArrayEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    public class ProtoUtils {
        protected final static Logger logger = LoggerFactory.getLogger(ProtoUtils.class);
    
        private static PoolingHttpClientConnectionManager cm=new PoolingHttpClientConnectionManager();
    
        static{
            //设置最大连接数不超过200
            cm.setMaxTotal(200);
            //每个路由默认的连接数20
            cm.setDefaultMaxPerRoute(20);
            //路由最大连接数不超过50
            
            HttpHost locaHost=new HttpHost("localhost",80, "http://");
            HttpRoute route=new HttpRoute(locaHost);
            cm.setMaxPerRoute(route, 50);
        }
    
        public static byte[] post(String url, byte[] date){
            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "x-protobuf;charset=UTF-8");
            try {
                HttpEntity httpEntity = post(url, null, headers, new ByteArrayEntity(date));
                return EntityUtils.toByteArray(httpEntity);
            } catch (Exception e) {
                logger.error("Http post protobuf failed:"+url, e);
            }
            return date;
        }
    
        public static HttpEntity post(String url, Map<String, String> paraments, Map<String, String> headers, HttpEntity entity){
            RequestBuilder requestBuilder = RequestBuilder.post().setUri(url);
            if(headers != null){
                for (Map.Entry<String, String> entry : headers.entrySet()) {
                    requestBuilder.setHeader(entry.getKey(), entry.getValue());
                }
            }
            if(paraments != null){
                for (Map.Entry<String, String> entry : paraments.entrySet()) {
                    requestBuilder.addParameter(new BasicNameValuePair(entry.getKey(), entry.getValue()));
                }
            }
            if(entity != null){
                requestBuilder.setEntity(entity);
            }
            RequestConfig requestConfig = RequestConfig.custom()
                    .setConnectTimeout(3000)
                    .setConnectionRequestTimeout(3000)
                    .setSocketTimeout(3000).build();
            HttpUriRequest  httpUriRequset = requestBuilder.setConfig(requestConfig).build();
            try {
                return execute(url, httpUriRequset);
            } catch (Exception e) {
                httpUriRequset.abort();
                logger.error("Http post protobuf failed:"+url, e);
            }
            return null;
        }
        
        private static HttpEntity execute(String url, HttpUriRequest httpUriRequset) throws ClientProtocolException, IOException{
    
            CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
            CloseableHttpResponse httpResponse = httpClient.execute(httpUriRequset);
            StatusLine httpStatus = httpResponse.getStatusLine();
            if(httpStatus.getStatusCode() != 200){
                if(httpResponse != null){
                    EntityUtils.consume(httpResponse.getEntity());
                    httpResponse.close();
                }
            }
            return httpResponse.getEntity();
        }
        
    }
    

    相关文章

      网友评论

          本文标题:Protohttp 请求

          本文链接:https://www.haomeiwen.com/subject/vudioqtx.html