日期:2014-05-16  浏览次数:20988 次

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 HttpResponseInterce