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;
// }
//
// }
}
相关推荐
### 动态数据获取难点 动态数据通常指的是那些需要执行JavaScript代码才能加载的内容。这些数据在用户打开网页时不会立即展示,而是在页面加载之后通过JavaScript异步调用接口进行加载。这类数据的抓取对爬虫来说是...
在接口自动化测试中,HttpClient扮演了客户端的角色,模拟用户与服务器的交互,如GET、POST、PUT等操作,获取或发送JSON、XML等数据格式。 3. **TestNG**: TestNG是一款强大的测试框架,它支持单元测试、集成测试、...
对于WCF服务,响应体通常是XML或JSON格式的数据,需要解析成Java对象。 5. **数据序列化和反序列化**:由于Java和.NET之间的类型不兼容,需要使用数据转换工具,例如本例中的`json-lib-2.4-jdk15.jar`可能是用于...
一般会包含你的API密钥、城市名或经纬度、所需的数据类型(JSON或XML)等。 3. **使用HTTP客户端库**:Java有多种HTTP客户端库可供选择,如HttpURLConnection(内置在Java标准库中)、Apache HttpClient或OkHttp。...
2. **处理响应**:接收到服务器的响应后,HttpClient可以解析响应状态码、响应头以及响应体,帮助开发者获取并处理返回的数据。 3. **连接管理**:HttpClient提供了连接池和连接管理机制,可以优化并发请求的性能,...
当请求或响应数据为JSON格式时,可以通过设置`CONTENT_TYPE_JSON`常量来指定Content-Type头。 - **XML数据格式** 同样,对于XML格式的数据,可以通过设置`CONTENT_TYPE_XML`常量来指定Content-Type头。 #### 总结...
- 使用GsonConverterFactory创建Retrofit实例,将JSON数据自动转换为Java对象。 - 调用Retrofit实例的方法发起网络请求,获取到JSON响应。 - 将JSON字符串解析成Java对象,可以是自定义的实体类或者Map。 5. ...
在压缩包中的"使用HttpClient发送json必须的jar包"可能包含了处理JSON数据所必需的库,如`gson-x.x.x.jar`或`jackson-core-x.x.x.jar`、`jackson-databind-x.x.x.jar`等。 在"使用说明.txt"中,通常会详细阐述如何...
3. **Gson转换器**:为了将服务器返回的JSON数据转化为Java对象,我们需要使用Gson库。Retrofit允许添加转换器工厂,GsonConverterFactory就是一个这样的例子。通过这个转换器,Retrofit能够将JSON字符串自动转化为...
3. **处理响应**:包括读取响应状态码、获取响应体、解析JSON或XML数据等。可能会有一个`handleResponse()`方法来处理这些操作。 4. **错误处理**:当请求失败时,工具类会提供异常处理逻辑,可能包含重试机制。 5...
6. **ezmorph-1.0.3.jar**:Ezmorph库提供了对象转换的功能,这在处理JSON数据时,如果需要将JSON值转换为不同的Java类型,Ezmorph可以发挥重要作用。 7. **commons-logging-1.1.1.jar**:Apache Commons Logging是...
`json-lib-2.4-jdk15.jar`提供了多种将Java对象转换为JSON格式以及将JSON数据转换回Java对象的方法。例如,你可以使用`net.sf.json.JSONObject`来创建和操作JSON对象,或者使用`net.sf.json.JSONArray`处理JSON数组...
RESTful服务基于HTTP方法(GET、POST、PUT、DELETE等),且通常返回JSON格式的数据,而不是XML。然而,对于理解XML拼接和Web Service调用的基本原理,上述SOAP的讨论仍然适用。 通过以上步骤,我们可以理解如何...
例如,对于JSON格式的数据,可以使用Jackson或Gson库进行解析。 在开发过程中,理解HTTP协议的原理和Java中处理HTTP的方法,对于构建网络应用至关重要。这不仅可以帮助优化网络请求的效率,还能有效地处理网络异常...
创建一个基于Maven的Java项目的第一步是设置`pom.xml`文件,这是Maven项目的灵魂,它定义了项目的基本信息,包括项目名称、版本、打包类型(例如jar或war),以及项目依赖的库。例如: ```xml ...
这可能需要与彩票发行机构的服务器进行数据交互,通过HTTP请求获取最新结果,然后解析返回的JSON或XML数据。JAVA提供了丰富的网络编程API,如HttpURLConnection或第三方库如Apache HttpClient,来实现网络通信。 3....
2. **JSON序列化和反序列化**:使用Gson或Jackson库将Java对象转换为JSON字符串,以及将接收到的JSON数据转换回Java对象。 3. **Struts2配置**:在struts.xml文件中配置Action,指定输入输出的类型,以及如何将结果...
它不仅简洁易用,而且支持多种数据格式(如XML、JSON等)。本文将详细介绍如何使用Java语言来调用HTTP REST接口,并提供具体的POST与GET请求的实现示例。 #### 二、HTTP REST简介 REST (Representational State ...