`

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

    博客分类:
  • Java
 
阅读更多

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;

//        }

//

//    }

}

分享到:
评论

相关推荐

    Java爬虫Jsoup+httpclient获取动态生成的数据

    ### 动态数据获取难点 动态数据通常指的是那些需要执行JavaScript代码才能加载的内容。这些数据在用户打开网页时不会立即展示,而是在页面加载之后通过JavaScript异步调用接口进行加载。这类数据的抓取对爬虫来说是...

    Java_API_AutoFrame.rar

    在接口自动化测试中,HttpClient扮演了客户端的角色,模拟用户与服务器的交互,如GET、POST、PUT等操作,获取或发送JSON、XML等数据格式。 3. **TestNG**: TestNG是一款强大的测试框架,它支持单元测试、集成测试、...

    httpClient调用wcf

    对于WCF服务,响应体通常是XML或JSON格式的数据,需要解析成Java对象。 5. **数据序列化和反序列化**:由于Java和.NET之间的类型不兼容,需要使用数据转换工具,例如本例中的`json-lib-2.4-jdk15.jar`可能是用于...

    java获取天气信息

    一般会包含你的API密钥、城市名或经纬度、所需的数据类型(JSON或XML)等。 3. **使用HTTP客户端库**:Java有多种HTTP客户端库可供选择,如HttpURLConnection(内置在Java标准库中)、Apache HttpClient或OkHttp。...

    HttpClient依赖jar包.zip

    2. **处理响应**:接收到服务器的响应后,HttpClient可以解析响应状态码、响应头以及响应体,帮助开发者获取并处理返回的数据。 3. **连接管理**:HttpClient提供了连接池和连接管理机制,可以优化并发请求的性能,...

    HttpClient工具类

    当请求或响应数据为JSON格式时,可以通过设置`CONTENT_TYPE_JSON`常量来指定Content-Type头。 - **XML数据格式** 同样,对于XML格式的数据,可以通过设置`CONTENT_TYPE_XML`常量来指定Content-Type头。 #### 总结...

    android使用JSON进行网络数据交换(服务端、客户端)的实现.rar

    - 使用GsonConverterFactory创建Retrofit实例,将JSON数据自动转换为Java对象。 - 调用Retrofit实例的方法发起网络请求,获取到JSON响应。 - 将JSON字符串解析成Java对象,可以是自定义的实体类或者Map。 5. ...

    使用HttpClient必须的jar包

    在压缩包中的"使用HttpClient发送json必须的jar包"可能包含了处理JSON数据所必需的库,如`gson-x.x.x.jar`或`jackson-core-x.x.x.jar`、`jackson-databind-x.x.x.jar`等。 在"使用说明.txt"中,通常会详细阐述如何...

    Android HTTP网络请求获取JSON数据

    3. **Gson转换器**:为了将服务器返回的JSON数据转化为Java对象,我们需要使用Gson库。Retrofit允许添加转换器工厂,GsonConverterFactory就是一个这样的例子。通过这个转换器,Retrofit能够将JSON字符串自动转化为...

    httpClient请求

    3. **处理响应**:包括读取响应状态码、获取响应体、解析JSON或XML数据等。可能会有一个`handleResponse()`方法来处理这些操作。 4. **错误处理**:当请求失败时,工具类会提供异常处理逻辑,可能包含重试机制。 5...

    JSON的7个jar包

    6. **ezmorph-1.0.3.jar**:Ezmorph库提供了对象转换的功能,这在处理JSON数据时,如果需要将JSON值转换为不同的Java类型,Ezmorph可以发挥重要作用。 7. **commons-logging-1.1.1.jar**:Apache Commons Logging是...

    json的Jar包

    `json-lib-2.4-jdk15.jar`提供了多种将Java对象转换为JSON格式以及将JSON数据转换回Java对象的方法。例如,你可以使用`net.sf.json.JSONObject`来创建和操作JSON对象,或者使用`net.sf.json.JSONArray`处理JSON数组...

    拼接xml调用webservice

    RESTful服务基于HTTP方法(GET、POST、PUT、DELETE等),且通常返回JSON格式的数据,而不是XML。然而,对于理解XML拼接和Web Service调用的基本原理,上述SOAP的讨论仍然适用。 通过以上步骤,我们可以理解如何...

    Http.rar_HTTP java_HTTP协议_http解析

    例如,对于JSON格式的数据,可以使用Jackson或Gson库进行解析。 在开发过程中,理解HTTP协议的原理和Java中处理HTTP的方法,对于构建网络应用至关重要。这不仅可以帮助优化网络请求的效率,还能有效地处理网络异常...

    利用java搭建maven项目,获取数据

    创建一个基于Maven的Java项目的第一步是设置`pom.xml`文件,这是Maven项目的灵魂,它定义了项目的基本信息,包括项目名称、版本、打包类型(例如jar或war),以及项目依赖的库。例如: ```xml ...

    彩票手_JAVA应用

    这可能需要与彩票发行机构的服务器进行数据交互,通过HTTP请求获取最新结果,然后解析返回的JSON或XML数据。JAVA提供了丰富的网络编程API,如HttpURLConnection或第三方库如Apache HttpClient,来实现网络通信。 3....

    Android+struts2+JSON方式的手机开发

    2. **JSON序列化和反序列化**:使用Gson或Jackson库将Java对象转换为JSON字符串,以及将接收到的JSON数据转换回Java对象。 3. **Struts2配置**:在struts.xml文件中配置Action,指定输入输出的类型,以及如何将结果...

    Java 调用Http Rest接口 例子说明

    它不仅简洁易用,而且支持多种数据格式(如XML、JSON等)。本文将详细介绍如何使用Java语言来调用HTTP REST接口,并提供具体的POST与GET请求的实现示例。 #### 二、HTTP REST简介 REST (Representational State ...

Global site tag (gtag.js) - Google Analytics