zoukankan      html  css  js  c++  java
  • HttpClient配置

    ClientConfiguration.java

    该类讲解了HttpClient的各方面的配置

    package com.ydd.study.hello.httpclient;
    
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.nio.charset.CodingErrorAction;
    import java.util.Arrays;
    
    import javax.net.ssl.SSLContext;
    
    import org.apache.http.Consts;
    import org.apache.http.Header;
    import org.apache.http.HttpHost;
    import org.apache.http.HttpRequest;
    import org.apache.http.HttpResponse;
    import org.apache.http.ParseException;
    import org.apache.http.client.CookieStore;
    import org.apache.http.client.CredentialsProvider;
    import org.apache.http.client.config.AuthSchemes;
    import org.apache.http.client.config.CookieSpecs;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.protocol.HttpClientContext;
    import org.apache.http.config.ConnectionConfig;
    import org.apache.http.config.MessageConstraints;
    import org.apache.http.config.Registry;
    import org.apache.http.config.RegistryBuilder;
    import org.apache.http.config.SocketConfig;
    import org.apache.http.conn.DnsResolver;
    import org.apache.http.conn.HttpConnectionFactory;
    import org.apache.http.conn.ManagedHttpClientConnection;
    import org.apache.http.conn.routing.HttpRoute;
    import org.apache.http.conn.socket.ConnectionSocketFactory;
    import org.apache.http.conn.socket.PlainConnectionSocketFactory;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.impl.DefaultHttpResponseFactory;
    import org.apache.http.impl.client.BasicCookieStore;
    import org.apache.http.impl.client.BasicCredentialsProvider;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.impl.conn.DefaultHttpResponseParser;
    import org.apache.http.impl.conn.DefaultHttpResponseParserFactory;
    import org.apache.http.impl.conn.ManagedHttpClientConnectionFactory;
    import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
    import org.apache.http.impl.conn.SystemDefaultDnsResolver;
    import org.apache.http.impl.io.DefaultHttpRequestWriterFactory;
    import org.apache.http.io.HttpMessageParser;
    import org.apache.http.io.HttpMessageParserFactory;
    import org.apache.http.io.HttpMessageWriterFactory;
    import org.apache.http.io.SessionInputBuffer;
    import org.apache.http.message.BasicHeader;
    import org.apache.http.message.BasicLineParser;
    import org.apache.http.message.LineParser;
    import org.apache.http.ssl.SSLContexts;
    import org.apache.http.util.CharArrayBuffer;
    import org.apache.http.util.EntityUtils;
    
    public class ClientConfiguration {
         public final static void main(String[] args) throws Exception {
    
                // Use custom message parser / writer to customize the way HTTP
                // messages are parsed from and written out to the data stream.
                HttpMessageParserFactory<HttpResponse> responseParserFactory = new DefaultHttpResponseParserFactory() {
    
                    @Override
                    public HttpMessageParser<HttpResponse> create(
                        SessionInputBuffer buffer, MessageConstraints constraints) {
                        LineParser lineParser = new BasicLineParser() {
    
                            @Override
                            public Header parseHeader(final CharArrayBuffer buffer) {
                                try {
                                    return super.parseHeader(buffer);
                                } catch (ParseException ex) {
                                    return new BasicHeader(buffer.toString(), null);
                                }
                            }
    
                        };
                        return new DefaultHttpResponseParser(
                            buffer, lineParser, DefaultHttpResponseFactory.INSTANCE, constraints) {
    
                            @Override
                            protected boolean reject(final CharArrayBuffer line, int count) {
                                // try to ignore all garbage preceding a status line infinitely
                                return false;
                            }
    
                        };
                    }
    
                };
                HttpMessageWriterFactory<HttpRequest> requestWriterFactory = new DefaultHttpRequestWriterFactory();
    
                // Use a custom connection factory to customize the process of
                // initialization of outgoing HTTP connections. Beside standard connection
                // configuration parameters HTTP connection factory can define message
                // parser / writer routines to be employed by individual connections.
                HttpConnectionFactory<HttpRoute, ManagedHttpClientConnection> connFactory = new ManagedHttpClientConnectionFactory(
                        requestWriterFactory, responseParserFactory);
    
                // Client HTTP connection objects when fully initialized can be bound to
                // an arbitrary network socket. The process of network socket initialization,
                // its connection to a remote address and binding to a local one is controlled
                // by a connection socket factory.
    
                // SSL context for secure connections can be created either based on
                // system or application specific properties.
                SSLContext sslcontext = SSLContexts.createSystemDefault();
    
                // Create a registry of custom connection socket factories for supported
                // protocol schemes.
                Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
                    .register("http", PlainConnectionSocketFactory.INSTANCE)
                    .register("https", new SSLConnectionSocketFactory(sslcontext))
                    .build();
    
                // Use custom DNS resolver to override the system DNS resolution.
                DnsResolver dnsResolver = new SystemDefaultDnsResolver() {
    
                    @Override
                    public InetAddress[] resolve(final String host) throws UnknownHostException {
                        if (host.equalsIgnoreCase("myhost")) {
                            return new InetAddress[] { InetAddress.getByAddress(new byte[] {127, 0, 0, 1}) };
                        } else {
                            return super.resolve(host);
                        }
                    }
    
                };
    
                // Create a connection manager with custom configuration.
                PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(
                        socketFactoryRegistry, connFactory, dnsResolver);
    
                // Create socket configuration
                SocketConfig socketConfig = SocketConfig.custom()
                    .setTcpNoDelay(true)
                    .build();
                // Configure the connection manager to use socket configuration either
                // by default or for a specific host.
                connManager.setDefaultSocketConfig(socketConfig);
                connManager.setSocketConfig(new HttpHost("somehost", 80), socketConfig);
                // Validate connections after 1 sec of inactivity
                connManager.setValidateAfterInactivity(1000);
    
                // Create message constraints
                MessageConstraints messageConstraints = MessageConstraints.custom()
                    .setMaxHeaderCount(200)
                    .setMaxLineLength(2000)
                    .build();
                // Create connection configuration
                ConnectionConfig connectionConfig = ConnectionConfig.custom()
                    .setMalformedInputAction(CodingErrorAction.IGNORE)
                    .setUnmappableInputAction(CodingErrorAction.IGNORE)
                    .setCharset(Consts.UTF_8)
                    .setMessageConstraints(messageConstraints)
                    .build();
                // Configure the connection manager to use connection configuration either
                // by default or for a specific host.
                connManager.setDefaultConnectionConfig(connectionConfig);
                connManager.setConnectionConfig(new HttpHost("somehost", 80), ConnectionConfig.DEFAULT);
    
                // Configure total max or per route limits for persistent connections
                // that can be kept in the pool or leased by the connection manager.
                connManager.setMaxTotal(100);
                connManager.setDefaultMaxPerRoute(10);
                connManager.setMaxPerRoute(new HttpRoute(new HttpHost("somehost", 80)), 20);
    
                // Use custom cookie store if necessary.
                CookieStore cookieStore = new BasicCookieStore();
                // Use custom credentials provider if necessary.
                CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
                // Create global request configuration
                RequestConfig defaultRequestConfig = RequestConfig.custom()
                    .setCookieSpec(CookieSpecs.DEFAULT)
                    .setExpectContinueEnabled(true)
                    .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
                    .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))
                    .build();
    
                // Create an HttpClient with the given custom dependencies and configuration.
                CloseableHttpClient httpclient = HttpClients.custom()
                    .setConnectionManager(connManager)
                    .setDefaultCookieStore(cookieStore)
                    .setDefaultCredentialsProvider(credentialsProvider)
                    .setProxy(new HttpHost("myproxy", 8080))
                    .setDefaultRequestConfig(defaultRequestConfig)
                    .build();
    
                try {
                    HttpGet httpget = new HttpGet("http://httpbin.org/get");
                    // Request configuration can be overridden at the request level.
                    // They will take precedence over the one set at the client level.
                    RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig)
                        .setSocketTimeout(5000)
                        .setConnectTimeout(5000)
                        .setConnectionRequestTimeout(5000)
                        .setProxy(new HttpHost("myotherproxy", 8080))
                        .build();
                    httpget.setConfig(requestConfig);
    
                    // Execution context can be customized locally.
                    HttpClientContext context = HttpClientContext.create();
                    // Contextual attributes set the local context level will take
                    // precedence over those set at the client level.
                    context.setCookieStore(cookieStore);
                    context.setCredentialsProvider(credentialsProvider);
    
                    System.out.println("executing request " + httpget.getURI());
                    CloseableHttpResponse response = httpclient.execute(httpget, context);
                    try {
                        System.out.println("----------------------------------------");
                        System.out.println(response.getStatusLine());
                        System.out.println(EntityUtils.toString(response.getEntity()));
                        System.out.println("----------------------------------------");
    
                        // Once the request has been executed the local context can
                        // be used to examine updated state and various objects affected
                        // by the request execution.
    
                        // Last executed request
                        context.getRequest();
                        // Execution route
                        context.getHttpRoute();
                        // Target auth state
                        context.getTargetAuthState();
                        // Proxy auth state
                        context.getTargetAuthState();
                        // Cookie origin
                        context.getCookieOrigin();
                        // Cookie spec used
                        context.getCookieSpec();
                        // User security token
                        context.getUserToken();
    
                    } finally {
                        response.close();
                    }
                } finally {
                    httpclient.close();
                }
            }
    }

    https://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientConnectionRelease.java

  • 相关阅读:
    MongoDB数据库新建数据库用户
    Grafana部署
    k8s ingress及ingress controller
    Rabbitmq如何安装插件
    RabbitMQ手册之rabbitmq-plugins
    RabbitMQ运行在Docker容器中
    K8S资源限制
    System类
    Runtime类
    StringBuffer类
  • 原文地址:https://www.cnblogs.com/YDDMAX/p/5379632.html
Copyright © 2011-2022 走看看