public class HttpClientFetch extends TestCase {
// 使用 GET 方式向后台递交请求
public void testFetch01() {
try {
// HttpClient主要负责执行请求,可以把它看做是一个浏览器
HttpClient httpclient = new DefaultHttpClient();
// 利用HTTP GET向服务器发起请求
HttpGet get = new HttpGet("http://empower.edtest.com:8080/");
// 获得服务器响应的的所有信息
HttpResponse response = httpclient.execute(get);
// 获得服务器响应回来的消息体(不包括HTTP HEAD)
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream is = entity.getContent();
// 将InputStream转换为Reader,并使用缓冲读取,提高效率,同时可以按行读取内容
BufferedReader br = new BufferedReader(new InputStreamReader(
is, "UTF-8"));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
is.close();
}
// 释放所有的链接资源,一般在所有的请求处理完成之后,才需要释放
httpclient.getConnectionManager().shutdown();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// 自动获得响应的编码信息
public void testFetch02() {
try {
// HttpClient主要负责执行请求
HttpClient httpclient = new DefaultHttpClient();
// 利用HTTP GET向服务器发起请求
HttpGet get = new HttpGet("http://www.baidu.com/");// new
// HttpGet("http://localhost:8080/cms");
// 获得服务器响应的的所有信息
HttpResponse response = httpclient.execute(get);
// 获得服务器响应回来的消息体(不包括HTTP HEAD)
HttpEntity entity = response.getEntity();
if (entity != null) {
// 获得响应的字符集编码信息
// 即获取HTTP HEAD的:Content-Type:text/html;charset=UTF-8中的字符集信息
String charset = EntityUtils.getContentCharSet(entity);
System.out.println("响应的字符集是:" + charset);
InputStream is = entity.getContent();
// 使用响应中的编码来解释响应的内容
BufferedReader br = new BufferedReader(new InputStreamReader(
is, charset));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
is.close();
}
// 释放所有的链接资源,一般在所有的请求处理完成之后,才需要释放
httpclient.getConnectionManager().shutdown();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// 设置代理服务器,访问网站
public void testFetch03() {
try {
// HttpClient主要负责执行请求
HttpClient httpclient = new DefaultHttpClient();
// 设置代理服务器
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
new HttpHost("121.12.249.207", 3128));
// 利用HTTP GET向服务器发起请求
HttpGet get = new HttpGet("http://www.baidu.com/");// new
// HttpGet("http://localhost:8080/cms");
// 获得服务器响应的的所有信息
HttpResponse response = httpclient.execute(get);
// 获得服务器响应回来的消息体(不包括HTTP HEAD)
HttpEntity entity = response.getEntity();
if (entity != null) {
// 获得响应的字符集编码信息
// 即获取HTTP HEAD的:Content-Type:text/html;charset=UTF-8中的字符集信息
String charset = EntityUtils.getContentCharSet(entity);
System.out.println("响应的字符集是:" + charset);
InputStream is = entity.getContent();
// 使用响应中的编码来解释响应的内容
BufferedReader br = new BufferedReader(new InputStreamReader(
is, charset));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
is.close();
}
// 释放所有的链接资源,一般在所有的请求处理完成之后,才需要释放
httpclient.getConnectionManager().shutdown();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获得重定向之后的网址信息 HttpClient 缺省情况下自动处理客户端重定向,即当你访问网页(比如A 网页)之后,假设被重定向到了 B
* 网页,那么,HttpClient 将自动返回B 网页的内容,无需再编程处理它!有时候我们可能想要知道A 网 页被重定向到了哪里,也就是取得B
* 网页的网址,那么可以通过下述例子获得:
*/
public void testFetch04() {
try {
// HttpClient主要负责执行请求
HttpClient httpclient = new DefaultHttpClient();
HttpContext context = new BasicHttpContext();
// 利用HTTP GET向服务器发起请求
HttpGet get = new HttpGet(
"http://localhost:8080/cms/backend/main.jsp");
// 获得服务器响应的的所有信息
HttpResponse response = httpclient.execute(get, context);
// 获得重定向之后的主机地址信息
HttpHost targetHost = (HttpHost) context
.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
System.out.println(targetHost); // http://localhost:8080
// 获得实际的请求对象的URI(即重定向之后的"/cms/backend/login.jsp")
HttpUriRequest actualRequest = (HttpUriRequest) context
.getAttribute(ExecutionContext.HTTP_REQUEST);
System.out.println(actualRequest.getURI());
// 获得服务器响应回来的消息体(不包括HTTP HEAD)
HttpEntity entity = response.getEntity();
if (entity != null) {
// 获得响应的字符集编码信息
// 即获取HTTP HEAD的:Content-Type:text/html;charset=UTF-8中的字符集信息
String charset = EntityUtils.getContentCharSet(entity);
System.out.println("响应的字符集是:" + charset);
InputStream is = entity.getContent();
// 使用响应中的编码来解释响应的内容
BufferedReader br = new BufferedReader(new InputStreamReader(
is, charset));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
is.close();
}
// 释放所有的链接资源,一般在所有的请求处理完成之后,才需要释放
httpclient.getConnectionManager().shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* HttpContext,实际上是客户端用来在多次请求-响应的交互中,保持状态信息用的。假如我们在调用 httpclient.execute
* 方法的时候,将HttpContext 对象作为参数传给这个方法(请看上述例子),那么 HttpClient
* 将把请求-响应交互过程中的状态信息存储在HttpContext 中。 比如上面的例子中,HttpClient
* 把主机信息和真正的请求对象(所谓真正的请求对象,因为我们发出的是 main.jsp
* 的请求,但这个请求实际上被重定向到了login.jsp,所以真正的请求对象实际上是
* login.jsp)等信息(请参考文档说明)放到了HttpContext 中! 我们自己也可以利用HttpContext
* 来存放一些我们想要存放的其它信息,以便下次请求的时候,能够把这 些信息拿出来使用!
*/
/*
* HttpClient 能够支持自动Cookie 处理。设想一个典型的场景:首先打开登录页面,然后输入用户名和密
* 码登录,然后访问那些只有登录之后才能访问的网页…… 如果我们用浏览器,因为浏览器可以将登录之后的会话信息用Cookie
* 存储在本地,所以,登录之后的每次 请求,都会自动向服务器发送Cookie 的信息,我们利用HttpClient,这些过程都全部可以自动化处理 了。
*/
public void testFetch05() {
try {
// HttpClient主要负责执行请求
HttpClient httpclient = new DefaultHttpClient();
HttpContext context = new BasicHttpContext();
// 利用HTTP GET向服务器发起请求,
HttpGet get = new HttpGet("http://localhost:8080/cms/backend/login.jsp");
// 获得服务器响应的的所有信息
HttpResponse response = httpclient.execute(get, context);
// 获得服务器响应回来的消息体(不包括HTTP HEAD)
HttpEntity entity = response.getEntity();
String charset = null;
if (entity != null) {
// 获得响应的字符集编码信息
// 即获取HTTP HEAD的:Content-Type:text/html;charset=UTF-8中的字符集信息
charset = EntityUtils.getContentCharSet(entity);
System.out.println("响应的字符集是:" + charset);
InputStream is = entity.getContent();
// 使用响应中的编码来解释响应的内容
BufferedReader br = new BufferedReader(new InputStreamReader(
is, charset));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
is.close();
}
// ************* 执行登录请求 ********************//
HttpPost post = new HttpPost("http://localhost:8080/cms/backend/LoginServlet");
// 添加POST参数
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("username", "admin"));
nvps.add(new BasicNameValuePair("password", "admin"));
//浏览器向服务器传递数据的时候,会在后台对数据先进行编码。
post.setEntity(new UrlEncodedFormEntity(nvps, charset));
response = httpclient.execute(post);
entity = response.getEntity();
if (entity != null) {
InputStream is = entity.getContent();
// 使用响应中的编码来解释响应的内容
BufferedReader br = new BufferedReader(new InputStreamReader(
is, charset));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
is.close();
}
// ******************* 请求文章查询 ********************//
get = new HttpGet("http://localhost:8080/cms/backend/ArticleServlet");
//要保证这里的httpclient与之前的是同一个
response = httpclient.execute(get);
entity = response.getEntity();
if (entity != null) {
InputStream is = entity.getContent();
// 使用响应中的编码来解释响应的内容
BufferedReader br = new BufferedReader(new InputStreamReader(
is, charset));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
is.close();
}
// 释放所有的链接资源,一般在所有的请求处理完成之后,才需要释放
httpclient.getConnectionManager().shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
}
本文参考:李腾飞学习笔记HttpClient 入门。
分享到:
相关推荐
它适合那些希望快速掌握HttpClient基本操作的初学者,同时也为那些计划使用HttpClient开发复杂HTTP客户端应用的开发者提供了参考。通过这篇教程,读者将能够了解如何利用HttpClient构建HTTP客户端应用,执行各种HTTP...
这三个jar包是HttpClient基本操作的基石,但请注意,随着HttpClient的发展,新的版本可能需要额外的依赖。例如,HttpClient 4.x版本引入了httpcore和httpclient依赖,而HttpClient 5.x版本则进一步更新了依赖结构。...
下面将详细讲解HttpClient的基本用法,尤其是GET方法的使用。 首先,创建一个HttpClient的实例,这是所有操作的基础。通常,我们可以使用默认构造函数创建一个HttpClient对象,如下所示: ```java HttpClient ...
以下是使用HTTPClient模拟登录并保持会话的基本步骤: 1. **导入必要的库**: 首先,你需要在项目中引入Apache HttpClient库。如果使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.apache....
在Java 11及更高版本中,HttpClient是一个重要的新...通过本教程,你已经掌握了创建HttpClient、发送异步请求和处理响应的基本方法,接下来可以进一步探索高级特性和用法,比如错误处理、流处理、自定义响应处理器等。
3. **身份验证和安全**:HttpClient支持多种身份验证机制,包括基本认证、摘要认证、NTLM等,并且可以与SSL/TLS协议结合,确保数据传输的安全性。 4. **重试和恢复策略**:HttpClient内置了重试和恢复策略,当网络...
使用HttpClient的基本步骤如下: 1. 创建HttpClient实例:`CloseableHttpClient httpClient = HttpClients.createDefault();` 2. 构建请求:例如,`HttpGet httpGet = new HttpGet("http://example.com");` 3. 设置...
**一、HttpClient基本概念** 1. **HttpClient对象**:HttpClient是整个库的核心,它是执行HTTP请求的主体。通过HttpClient实例,我们可以配置连接管理、重试策略、超时设置等高级特性。 2. **HttpHost对象**:表示...
除了基本的HTTP请求,HttpClient还支持更复杂的操作,如文件上传、下载、分块传输、自定义HTTP头、超时设置等。例如,使用HttpPost进行表单数据提交: ```java HttpPost httpPost = new HttpPost(...
以上就是使用HttpClient调用WebService的基本步骤。实际应用中,你可能需要根据具体的WebService规范和需求进行调整。HttpClient的灵活性使其可以适应各种复杂的HTTP通信场景,但同时也需要开发者对HTTP协议有较深入...
7. **认证和安全**:HttpClient支持基本认证、NTLM、Kerberos等多种认证机制,并且可以处理HTTPS连接,确保数据传输的安全。 8. **多部分表单提交(Multipart Form Data)**:对于POST请求,特别是上传文件时,...
使用 HttpClient 库进行 HTTP 请求的基本步骤如下: 1. **实例化 HttpClient 对象**:首先,你需要创建一个 `HttpClient` 类的实例,例如 `HttpClient client;` 2. **设置服务器信息**:调用 `client.begin()` ...
在本篇文章中,我们将深入探讨HttpClient的基本概念、功能以及其依赖的jar包。 HttpClient 4.2.1是文中提及的具体版本,它提供了丰富的功能,包括但不限于支持HTTP/1.1协议,支持连接管理,自动处理重定向,支持...
8. **异步处理**:除了同步的请求-响应模式,HttpClient还提供了异步操作的能力,允许在等待响应时执行其他任务。 9. **重试策略**:对于网络不稳定的情况,HttpClient可以配置重试策略,自动处理失败的请求。 10....
3. `httpcore-4.3.2.jar`:这是HttpClient的基础库,包含了HTTP协议的基本操作,如HTTP连接管理、编码处理等。 在实际使用中,我们可以按照以下步骤创建一个简单的HTTP GET请求: 1. 创建`CloseableHttpClient`...
HttpClient是Apache基金会开发的一个Java库,用于执行HTTP请求。...这就是关于HttpClient 4.13版本及其相关库的一些基本介绍,它们在Java Web开发中扮演着重要角色,帮助开发者高效、稳定地与Web服务进行交互。
`HttpClient`的基本用法 创建`HttpClient`实例通常是通过静态`HttpClientFactory`方法或直接实例化`HttpClient`完成的。为了确保高效的资源管理,建议使用`HttpClientFactory`,尤其是对于频繁创建和销毁`...
2. **认证和安全**:HttpClient支持多种认证机制,包括基本认证、摘要认证等。同时,它也支持HTTPS,提供了SSL/TLS的安全传输。 3. **重定向处理**:HttpClient可以自动处理HTTP状态码3xx的重定向,也可以手动控制...
4. **认证和授权**:HttpClient支持多种认证机制,包括基本认证、摘要认证、NTLM和Kerberos,以及自定义认证策略。对于授权,它可以处理质询-响应认证流程。 5. **重试策略**:通过`HttpRequestRetryHandler`接口,...