wuliws 发表于 2017-1-13 10:01:47

HttpClient压缩传输的代码,大部分都不靠谱,apache httpclient 官网的最靠谱,亲测!

  HttpClient压缩传输的代码,大部分都不靠谱,apache httpclient 官网的最靠谱,亲测!
  ------------------------------------------------------------------------------------------------------
  /*
  * ====================================================================
  * 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 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.entity.GzipDecompressingEntity;
  import org.apache.http.client.methods.HttpGet;
  import org.apache.http.impl.client.DefaultHttpClient;
  import org.apache.http.protocol.HttpContext;
  import org.apache.http.util.EntityUtils;
  /**
  * Demonstration of 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 {@link org.apache.http.client.HttpClient HttpClient}
  * interface.
  */
  public class ClientGZipContentCompression {
  public final static void main(String[] args) throws Exception {
  DefaultHttpClient httpclient = new DefaultHttpClient();
  try {
  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();
  if (entity != null) {
  Header ceheader = entity.getContentEncoding();
  if (ceheader != null) {
  HeaderElement[] codecs = ceheader.getElements();
  for (int i = 0; i < codecs.length; i++) {
  if (codecs.getName().equalsIgnoreCase("gzip")) {
  response.setEntity(
  new GzipDecompressingEntity(response.getEntity()));
  return;
  }
  }
  }
  }
  }
  });
  HttpGet httpget = new HttpGet("http://cppmule.zapto.org/acr/acrphone-service/area/cities");
  // 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());
  }
  } finally {
  // When HttpClient instance is no longer needed,
  // shut down the connection manager to ensure
  // immediate deallocation of all system resources
  httpclient.getConnectionManager().shutdown();
  }
  }
  }
页: [1]
查看完整版本: HttpClient压缩传输的代码,大部分都不靠谱,apache httpclient 官网的最靠谱,亲测!