`
longgangbai
  • 浏览: 7349634 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于Httpclient的总结(二)

阅读更多
(8)针对在HTTPClient采用压缩格式的文件的传输,必须采用拦截器进行特殊的处理
public class ClientGZipContentCompression {

    public final static void main(String[] args) throws Exception {
        DefaultHttpClient httpclient = new DefaultHttpClient();
        //设置相关的压缩文件标识,在请求头的信息中
        httpclient.addRequestInterceptor(new HttpRequestInterceptor() {
           
            public void process(
                    final HttpRequest request, 
                    final HttpContext context) throws HttpException, IOException {
                if (!request.containsHeader("Accept-Encoding")) {
                    request.addHeader("Accept-Encoding", "gzip");
                }
            }

        });
        //设置相应相应的拦截器,用于处理接收到的拦截的压缩信息
        httpclient.addResponseInterceptor(new HttpResponseInterceptor() {
           
            public void process(
                    final HttpResponse response, 
                    final HttpContext context) throws HttpException, IOException {
                HttpEntity entity = response.getEntity();
                Header ceheader = entity.getContentEncoding();
                if (ceheader != null) {
                    HeaderElement[] codecs = ceheader.getElements();
                    for (int i = 0; i < codecs.length; i++) {
                        if (codecs[i].getName().equalsIgnoreCase("gzip")) {
                            response.setEntity(
                                    new GzipDecompressingEntity(response.getEntity())); 
                            return;
                        }
                    }
                }
            }
            
        });
        
        HttpGet httpget = new HttpGet("http://www.apache.org/"); 
        
        // Execute HTTP request
        System.out.println("executing request " + httpget.getURI());
        HttpResponse response = httpclient.execute(httpget);

        System.out.println("----------------------------------------");
        System.out.println(response.getStatusLine());
        System.out.println(response.getLastHeader("Content-Encoding"));
        System.out.println(response.getLastHeader("Content-Length"));
        System.out.println("----------------------------------------");

        HttpEntity entity = response.getEntity();
        
        if (entity != null) {
            String content = EntityUtils.toString(entity);
            System.out.println(content);
            System.out.println("----------------------------------------");
            System.out.println("Uncompressed size: "+content.length());
        }
        // When HttpClient instance is no longer needed, 
        // shut down the connection manager to ensure
        // immediate deallocation of all system resources
        httpclient.getConnectionManager().shutdown();        
    }
   //压缩文件处理的实体包装类
    static class GzipDecompressingEntity extends HttpEntityWrapper {
        public GzipDecompressingEntity(final HttpEntity entity) {
            super(entity);
        }
        @Override
        public InputStream getContent()
            throws IOException, IllegalStateException {
            // the wrapped entity's getContent() decides about repeatability
            InputStream wrappedin = wrappedEntity.getContent();
            return new GZIPInputStream(wrappedin);
        }
        @Override
        public long getContentLength() {
            // length of ungzipped content is not known
            return -1;
        }

    } 
    
}
(9)在代理中添加相关访问权限
        DefaultHttpClient httpclient = new DefaultHttpClient();

        httpclient.getCredentialsProvider().setCredentials(
                new AuthScope("localhost", 8080), 
                new UsernamePasswordCredentials("username", "password"));

        HttpHost targetHost = new HttpHost("www.verisign.com", 443, "https"); 
        HttpHost proxy = new HttpHost("localhost", 8080); 

        httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

        HttpGet httpget = new HttpGet("/");
        
        System.out.println("executing request: " + httpget.getRequestLine());
        System.out.println("via proxy: " + proxy);
        System.out.println("to target: " + targetHost);
        
        HttpResponse response = httpclient.execute(targetHost, httpget);
(10)针对特定的相应中信息比较多那么可以采用相关的相应处理器处理
     ResponseHandler<String> responseHandler = new BasicResponseHandler();
        String responseBody = httpclient.execute(httpget, responseHandler);
        实现类如下:
        public class BasicResponseHandler implements ResponseHandler<String>

关于HttpClient采用代理服务器的使用
        // 创建两个host对象,其中一个目标机器,和代理主机make sure to use a proxy that supports CONNECT
        HttpHost target = new HttpHost("issues.apache.org", 443, "https");
        HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http");

        //设置相关的注册信息 general setup
        SchemeRegistry supportedSchemes = new SchemeRegistry();

        // Register the "http" and "https" protocol schemes, they are
        // required by the default operator to look up socket factories.
        supportedSchemes.register(new Scheme("http", 
                PlainSocketFactory.getSocketFactory(), 80));
        supportedSchemes.register(new Scheme("https", 
                SSLSocketFactory.getSocketFactory(), 443));

        //设置相关的参数的信息
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, "UTF-8");
        HttpProtocolParams.setUseExpectContinue(params, true);
        //客户端连接管理器
        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, 
                supportedSchemes);

        DefaultHttpClient httpclient = new DefaultHttpClient(ccm, params);
        //设置请求采用代理的
        httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
 
        HttpGet req = new HttpGet("/");
        //执行请求并处理
        System.out.println("executing request to " + target + " via " + proxy);
        HttpResponse rsp = httpclient.execute(target, req);
        HttpEntity entity = rsp.getEntity();
     
   
(11)针对多线程的Httpclient中采用的特殊的连接管理
        // Create and initialize HTTP parameters
        HttpParams params = new BasicHttpParams();
        ConnManagerParams.setMaxTotalConnections(params, 100);
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        
        // Create and initialize scheme registry 
        SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(
                new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        
        // Create an HttpClient with the ThreadSafeClientConnManager.
        // This connection manager must be used if more than one thread will
        // be using the HttpClient.
        ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
        HttpClient httpClient = new DefaultHttpClient(cm, params);

 

分享到:
评论

相关推荐

    httpclient官网教程中文版

    ### Httpclient官网教程中文版知识点总结 #### 一、引言 HTTP协议作为互联网的核心通信标准之一,在现代网络服务及物联网设备中扮演着至关重要的角色。随着技术的发展,越来越多的应用和服务依赖于HTTP协议来实现...

    httpclient4.2.1.zip

    二、HttpClient 4.2.1的主要特性 1. **多线程支持**:HttpClient 4.2.1支持多线程并发请求,可以高效地处理大量并发连接,提升了处理能力。 2. **连接管理**:它提供了连接池管理,允许重用已建立的TCP连接,减少...

    httpclient

    二、HttpClient主要功能 1. **请求构造**:HttpClient允许我们创建各种类型的HTTP请求,包括GET、POST、PUT、DELETE等,可以通过设置URL、请求头、参数、实体内容等来定制请求。 2. **连接管理**:HttpClient可以...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    二、HttpClient的使用步骤 1. **创建HttpClient实例**:首先,需要创建一个HttpClient实例,可以设置连接超时、重试策略等参数。 2. **选择HttpMethod**:根据实际需求选择合适的HttpMethod,比如使用GetMethod或...

    httpclient4.5源码学习

    总结,HttpClient 4.5 是一款强大且灵活的 HTTP 客户端库,其源码结构清晰,设计模式巧妙,通过深入学习和实践,开发者可以更好地利用它来实现高效、安全的网络通信。理解 HttpClient 4.5 的源码,不仅有助于我们...

    httpclient-4.5.3官方API中文文档_最新译版_2886K

    二、HttpClient的核心组件 1. HttpClient实例:HttpClient是整个库的入口点,用于创建和执行HTTP请求。 2. HttpRequestBase:表示HTTP请求的基本类型,如GET、POST等,是所有HTTP请求的抽象基类。 3. HttpResponse:...

    httpclient4.1.2 jar包

    二、HttpClient 4.1.2核心特性 1. **连接管理**:HttpClient 4.1.2引入了HttpConnectionManager接口,用于管理和复用HTTP连接,降低网络延迟,提高效率。DefaultHttpClient实现了此接口,提供了连接池功能,可以...

    HttpClient实现文件下载

    #### 二、环境准备与需求分析 为了实现文件下载功能,我们需要以下条件: 1. **一台 Web 服务器**:用于存放待下载的文件。 2. **目标文件**:位于 Web 服务器的特定目录下。 3. **客户端程序**:使用 HttpClient ...

    httpclient jar

    二、主要组件 1. `commons-httpclient-3.1.jar`: 这是HttpClient的核心库,包含了所有执行HTTP请求和处理响应的类和接口。例如,`org.apache.http.client.HttpClient`接口定义了客户端的基本行为,而`org.apache....

    httpclient3.1 javadoc chm版

    总结,HttpClient 3.1 JavaDoc CHM版为开发者提供了全面的API文档,帮助他们理解和使用HttpClient进行HTTP通信。虽然HttpClient已经更新到更高级的版本,但这个旧版本的文档对于维护旧项目或理解HTTP通信基础仍然...

    HTTPCLIENT

    总结来说,HTTPCLIENT是一个强大的Java HTTP客户端库,与日志框架(如Log4j)结合使用,可以实现详细的请求跟踪和问题排查。同时,它利用Commons Codec库进行数据编码解码,确保数据在网络中的正确传输。理解和掌握...

    httpClient组件使用说明

    总结,HttpClient是Java中执行HTTP请求的强大工具,通过它,你可以轻松地进行GET、POST等HTTP操作,自定义请求头,处理响应数据。对于初级学员来说,理解并熟练运用HttpClient是掌握网络通信的关键步骤之一。在实际...

    android HttpClient

    总结,`HttpClient`在Android中用于处理复杂的网络任务,尤其是文件上传。虽然面临被替代的命运,但在某些情况下,如对低版本Android的支持和需要高级功能时,它仍然是一种实用的选择。结合Android_HTTP服务实例....

    httpclient-4.3.jar

    总结,Apache HttpClient 4.3是Java开发中的强大工具,它的灵活性和高效性使得它在处理HTTP通信时具有显著优势。通过深入了解其功能和特性,开发者能够更好地利用HttpClient实现各种复杂的HTTP交互需求。

    最全最新httpclient4.3.3

    总结,Apache HttpClient 4.3.3是Java开发者进行HTTP通信的强大工具。通过深入理解和应用,我们可以构建高效、可靠的网络应用程序,并在抓包、API调用等场景中游刃有余。了解和掌握HttpClient,无疑是提升Java网络...

    httpclient 4.3 中文版

    #### 二、HttpClient 的特点与适用范围 ##### 2.1 HttpClient 的主要特性: 1. **基于 HttpCore**:HttpClient 是基于 HttpCore 实现的客户端 HTTP 传输类库,这意味着它能够处理 HTTP 协议的基本层面,包括连接...

    httpclient4.4 jar包

    二、HttpClient 4.4关键特性 1. **性能优化**:HttpClient 4.4对连接池进行了优化,提高了并发请求处理能力,减少了TCP连接的创建和销毁次数,从而降低了网络延迟。 2. **线程安全**:HttpClient 4.4的设计考虑了...

    httpclient4.3.5

    二、HttpClient 4.3.5新特性 1. **连接管理**:4.3.5版本强化了连接管理器,支持连接池,可以有效复用TCP连接,减少网络延迟,提高性能。 2. **请求和响应处理**:新增了对HTTP/1.1和HTTP/2协议的支持,使得 ...

    httpclient-4.5.3.zip

    二、HttpClient的构建与配置 在使用HttpClient之前,首先需要构建一个HttpClient实例。HttpClient 4.5允许通过`HttpClientBuilder`类进行定制化配置,如设置连接超时、最大连接数、重试策略等。例如: ```java ...

Global site tag (gtag.js) - Google Analytics