Java_HttpClient获取返回类型为JSON或XML的数据

原创 2017年04月06日 17:38:29

HttpClient 获取返回类型为JSON或XML的数据

使用httpcomponents-client-4.1.3(下载页面:http://hc.apache.org/httpcomponents-client-ga/download.html 最新是5.20发布的4.2版本)向网页发送HTTP请求抓取数据。

我所调用的服务明确写了他们支持多种类型的返回结果,如下:

 The content types we currently support are:

•«text/html»

•«application/xhtml+xml»

•«text/xml»

•«application/json»

若不设置返回类型,每次获取的返回的内容是默认的text/html,而我需要的是更具有信息量的xml或者json。找了很多地方,没有看到设置ContentType的,纠结了一下。。。

其实,最好的教程还是httpclient下载下来自带的例子和pdf,其中examples中就有一个ClientGZipContentCompression.java,它是用来请求获取gzip的数据并解压显示。这个文件稍微改改就可以了。如下是接收json类型。

/ * ==================================================================== */

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;

 public class JsonTest{

    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", "application/json");

                    }

                }

 

            });

 

//            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://your_url");

            // 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();

        }

    } 

//    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;

//        }

//

//    }

}

 

posted on 2017-12-15 19:19  毛会懂  阅读(1671)  评论(0编辑  收藏  举报