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

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

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;

//        }

//

//    }

}

HttpClient获取返回类型为JSON或XML的数据的更多相关文章

  1. struts2 中的 result 返回类型是 json 的配置问题

    struts2 中的 result 返回类型是 json 的配置问题 1.引入包(本文中的包全部引自struts-2.1.8.1\lib): struts2-json-plugin-2.1.8.1.j ...

  2. json和xml封装数据、数据缓存到文件中

    一.APP的通信格式之xml xml:扩展标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己标记语言进行定义的源语言.XML格式统一,扩平台语言,非常适合数据传输和通信,业界公认的标准. ...

  3. ASP.NET Web Api返回对象类型为JSON还是XML

    在Umbraco平台上开发过程中,我用WebApi返回JSON result给前端 前端使用React调用这个web api来获取JSON result 我写的web api方法是返回JSON 类型的 ...

  4. SpringMVC——-Controller返回格式化数据如JSON、XML的配置方式和机制

    1.本文内容 我们在Web项目开发过程中,一般来说访问一个处理器,然后会返回一个视图,或者跳转到另外的处理器.但是随着项目越来越复杂,需求越来越复杂,对于处理器返回数据的类型要求也越来越多.比如要求能 ...

  5. Controller接收处理json、xml格式数据

    1.RequestBody接收json格式的数据,并直接转为对象. User.java使用lombok依赖包 @Data @AllArgsConstructor @NoArgsConstructor ...

  6. ajax 另外两种返回类型(json xml)

    返回json类型(例子): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  7. ajax返回类型dataType json和text比较

    $.ajax({ type: "post", url: "${ctx}/modules/fos/reference/echart", //dataType:'j ...

  8. SpringMVC常用配置-Controller返回格式化数据如JSON、XML的配置方式和机制

  9. SUBMIT RM07DOCS【MB51】 获取返回清单,抓取标准报表数据

    *&---------------------------------------------------------------------* *& Report YT_SUBMIT ...

随机推荐

  1. PHP 7.0 EOL (PHP 技术支持相关)

    PHP 7.0 EOL (PHP 支持相关) PHP 5.6 于 2018-12-31 结束(EOL) 从图表看出,PHP 7.0 是一个过渡版本,现在已经 EOL. 而 PHP 7.1 将于明年年底 ...

  2. spring boot中,jar包、war包的区别

    jar包.war包 比较(表格) 项目 jar包 war包 在开发调试完成之后,可以将应用打成JAR包的形式,可以直接使用Maven插件的package命令,最终会形成一个可运行的 JAR包.我们使用 ...

  3. slf4j-api、slf4j-log4j12、log4j 之间是什么关系?

    slf4j:Simple Logging Facade for Java,为java提供的简单日志Facade.Facade:门面,更底层一点说就是接口.他允许用户以自己的喜好,在工程中通过slf4j ...

  4. MySQL5.5.19安装

    本文详细介绍了Windows下安装MySQL5.5.19的全过程,希望对初学者有帮助.  http://dl.pconline.com.cn/html_2/1/79/id=465&pn=0.h ...

  5. C#连接Oracle数据库的方法(Oracle.DataAccess.Client也叫ODP.net)

    官方下载地址(ODP.net)(中文):http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/index.html 官方下载地址(O ...

  6. Spring+hibernate+mysql事物不回滚的原因以及处理

    最近项目突然出了点问题,然后发现用Service层下面的一个类的一个方法里的事务居然没有回滚.然后自己写了一个测试方法经过了N次测试都是不回滚.以下是测试方法的一部分: @Transactional( ...

  7. 【VS】使用vs2017自带的诊断工具(Diagnostic Tools)诊断程序的内存问题

    前言 一般来说.NET程序员是不用担心内存分配释放问题的,因为有垃圾收集器(GC)会自动帮你处理.但是GC只能收集那些不再使用的内存(根据对象是否被其它活动的对象所引用)来确定.所以如果代码编写不当的 ...

  8. [转]预编译 ASP.NET 网站

    转自:如何:预编译 ASP.NET 网站 Visual Studio 2005   预编译 ASP.NET 网站可缩短用户的初始响应时间,因为页在第一次被请求时无需编译.这对于经常更新的大型网站尤其有 ...

  9. 洛谷 P2054 [AHOI2005]洗牌

    题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...

  10. Oracle导出DMP文件的两种方法

    本文转载自:http://www.cnblogs.com/o-andy-o/archive/2013/06/05/3118611.html   导出: 方法一:利用PL/SQL Developer工具 ...