hc-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ol...@apache.org
Subject svn commit: r553860 - in /jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client: ClientCustomContext.java ClientGZipContentCompression.java
Date Fri, 06 Jul 2007 12:22:32 GMT
Author: olegk
Date: Fri Jul  6 05:22:31 2007
New Revision: 553860

URL: http://svn.apache.org/viewvc?view=rev&rev=553860
Log:
Added ClientGZipContentCompression sample demonstrating the use of protocol interceptors to
transparently modify properties of HTTP messages sent / received by the HTTP client

Added:
    jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientGZipContentCompression.java
  (with props)
Modified:
    jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientCustomContext.java

Modified: jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientCustomContext.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientCustomContext.java?view=diff&rev=553860&r1=553859&r2=553860
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientCustomContext.java
(original)
+++ jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientCustomContext.java
Fri Jul  6 05:22:31 2007
@@ -84,6 +84,10 @@
         for (int i = 0; i < cookies.length; i++) {
             System.out.println("Local cookie: " + cookies[i]);
         }
+        
+        // Consume response content
+        entity.consumeContent();
+        
         System.out.println("----------------------------------------");
     }
     

Added: jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientGZipContentCompression.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientGZipContentCompression.java?view=auto&rev=553860
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientGZipContentCompression.java
(added)
+++ jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientGZipContentCompression.java
Fri Jul  6 05:22:31 2007
@@ -0,0 +1,146 @@
+/*
+ * $HeadURL$
+ * $Revision$
+ * $Date$
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.examples.client;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.GZIPInputStream;
+
+import org.apache.http.Header;
+import org.apache.http.HeaderElement;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpException;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpRequestInterceptor;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpResponseInterceptor;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.entity.HttpEntityWrapper;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.protocol.HttpContext;
+import org.apache.http.util.EntityUtils;
+
+/**
+ * This examples demonstrates the use of protocol interceptors to transparently 
+ * modify properties of HTTP messages sent / received by the HTTP client.
+ * <p/>
+ * In this particular case HTTP client is made capable of transparent content 
+ * GZIP compression by adding two protocol interceptors: a request interceptor
+ * that adds 'Accept-Encoding: gzip' header to all outgoing requests and
+ * a response interceptor that automatically expands compressed response
+ * entities by wrapping them with a uncompressing decorator class. The use of
+ * protocol interceptors makes content compression completely transparent to the 
+ * consumer of the {@linkHttpClient} interface.
+ */
+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("----------------------------------------");
+
+        // Get hold of the response entity
+        HttpEntity entity = response.getEntity();
+        
+        // If the response does not enclose an entity, there is no need
+        // to bother about connection release
+        if (entity != null) {
+            String content = EntityUtils.toString(entity);
+            System.out.println(content);
+        }
+    }
+
+    static class GzipDecompressingEntity extends HttpEntityWrapper {
+
+        public GzipDecompressingEntity(final HttpEntity entity) {
+            super(entity);
+        }
+    
+        public InputStream getContent()
+            throws IOException, IllegalStateException {
+
+            // the wrapped entity's getContent() decides about repeatability
+            InputStream wrappedin = wrappedEntity.getContent();
+
+            return new GZIPInputStream(wrappedin);
+        }
+
+        public long getContentLength() {
+            // length of ungzipped content is not known
+            return -1;
+        }
+
+    } 
+    
+}
+

Propchange: jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientGZipContentCompression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientGZipContentCompression.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: jakarta/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientGZipContentCompression.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain



Mime
View raw message