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


    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;

    //        }

    //

    //    }

    }

  • 相关阅读:
    8.1.2 绑定Activity和Service
    8.1.1 Service的生命周期
    接收广播BroadcastReceiver
    Android Activity和Intent机制学习笔记
    Android开发笔记之:Handler Runnable与Thread的区别详解
    Android工程:引用另一个Android工程的方法详解
    android之内容提供者解析
    Android应用程序组件Content Provider的共享数据更新通知机制分析
    Red5实现直播
    轻松学习 red5 教程 像视频一样很详细还有代码直接可Copy
  • 原文地址:https://www.cnblogs.com/maohuidong/p/8044566.html
Copyright © 2020-2023  润新知