`
whoosh
  • 浏览: 235469 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

HttpClient的基本操作

 
阅读更多
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 入门。

分享到:
评论

相关推荐

    httpClient4.1入门教程.pdf

    它适合那些希望快速掌握HttpClient基本操作的初学者,同时也为那些计划使用HttpClient开发复杂HTTP客户端应用的开发者提供了参考。通过这篇教程,读者将能够了解如何利用HttpClient构建HTTP客户端应用,执行各种HTTP...

    Httpclient调用WebService所需jar包

    这三个jar包是HttpClient基本操作的基石,但请注意,随着HttpClient的发展,新的版本可能需要额外的依赖。例如,HttpClient 4.x版本引入了httpcore和httpclient依赖,而HttpClient 5.x版本则进一步更新了依赖结构。...

    HttpClient 基本用法

    下面将详细讲解HttpClient的基本用法,尤其是GET方法的使用。 首先,创建一个HttpClient的实例,这是所有操作的基础。通常,我们可以使用默认构造函数创建一个HttpClient对象,如下所示: ```java HttpClient ...

    httpclient如何保持session会话模拟登录后的操作

    以下是使用HTTPClient模拟登录并保持会话的基本步骤: 1. **导入必要的库**: 首先,你需要在项目中引入Apache HttpClient库。如果使用Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache....

    httpclient.jar包下载

    3. **身份验证和安全**:HttpClient支持多种身份验证机制,包括基本认证、摘要认证、NTLM等,并且可以与SSL/TLS协议结合,确保数据传输的安全性。 4. **重试和恢复策略**:HttpClient内置了重试和恢复策略,当网络...

    JDK 11 HttpClient的基本使用指南

    在Java 11及更高版本中,HttpClient是一个重要的新...通过本教程,你已经掌握了创建HttpClient、发送异步请求和处理响应的基本方法,接下来可以进一步探索高级特性和用法,比如错误处理、流处理、自定义响应处理器等。

    httpclient4+操作手册中文版

    在实际使用中,执行HTTP请求的基本步骤如下: 1. **创建HttpClient实例**:如`HttpClient httpclient = new DefaultHttpClient();` 2. **构建HTTP方法对象**:例如`HttpGet httpget = new HttpGet(...

    httpclient httpclient.jar

    使用HttpClient的基本步骤如下: 1. 创建HttpClient实例:`CloseableHttpClient httpClient = HttpClients.createDefault();` 2. 构建请求:例如,`HttpGet httpGet = new HttpGet("http://example.com");` 3. 设置...

    httpclient

    **一、HttpClient基本概念** 1. **HttpClient对象**:HttpClient是整个库的核心,它是执行HTTP请求的主体。通过HttpClient实例,我们可以配置连接管理、重试策略、超时设置等高级特性。 2. **HttpHost对象**:表示...

    httpclient官网教程中文版

    - **阻塞式IO**:HttpClient 使用传统的阻塞式IO模型,这意味着它在执行HTTP请求时会等待响应完成才继续执行后续操作。 - **灵活性**:与标准库提供的简单HTTP支持相比,HttpClient提供了更多高级特性,比如Cookie...

    httpclient-4.5jar包

    三、HttpClient基本使用 1. 创建HttpClient实例:首先需要创建一个HttpClient对象,例如使用`HttpClients.createDefault()`,或者自定义配置。 2. 构建HttpGet或HttpPost对象:根据需求选择HTTP方法,设置URL和其他...

    httpclient4.2.1.zip

    除了基本的HTTP请求,HttpClient还支持更复杂的操作,如文件上传、下载、分块传输、自定义HTTP头、超时设置等。例如,使用HttpPost进行表单数据提交: ```java HttpPost httpPost = new HttpPost(...

    HttpClient 调用WebService示例

    以上就是使用HttpClient调用WebService的基本步骤。实际应用中,你可能需要根据具体的WebService规范和需求进行调整。HttpClient的灵活性使其可以适应各种复杂的HTTP通信场景,但同时也需要开发者对HTTP协议有较深入...

    Arduino HttpClient 库文件

    使用 HttpClient 库进行 HTTP 请求的基本步骤如下: 1. **实例化 HttpClient 对象**:首先,你需要创建一个 `HttpClient` 类的实例,例如 `HttpClient client;` 2. **设置服务器信息**:调用 `client.begin()` ...

    httpclient4.3工具类

    7. **认证和安全**:HttpClient支持基本认证、NTLM、Kerberos等多种认证机制,并且可以处理HTTPS连接,确保数据传输的安全。 8. **多部分表单提交(Multipart Form Data)**:对于POST请求,特别是上传文件时,...

    httpclient所需lib

    在本篇文章中,我们将深入探讨HttpClient的基本概念、功能以及其依赖的jar包。 HttpClient 4.2.1是文中提及的具体版本,它提供了丰富的功能,包括但不限于支持HTTP/1.1协议,支持连接管理,自动处理重定向,支持...

    httpclient-4.5.jar

    1. `httpcore-4.x.jar`:这是HttpCore的单独发布,提供了基本的网络I/O和HTTP协议处理,是HttpClient运行的基石。 2. `httpmime-4.x.jar`:这个库扩展了HttpClient,使其能够处理MIME类型的请求和响应,比如上传...

    HttpClient所需jar包(全) httpClient.4.13jar

    HttpClient是Apache基金会开发的一个Java库,用于执行HTTP请求。...这就是关于HttpClient 4.13版本及其相关库的一些基本介绍,它们在Java Web开发中扮演着重要角色,帮助开发者高效、稳定地与Web服务进行交互。

    commons-httpclient.rar

    8. **异步处理**:除了同步的请求-响应模式,HttpClient还提供了异步操作的能力,允许在等待响应时执行其他任务。 9. **重试策略**:对于网络不稳定的情况,HttpClient可以配置重试策略,自动处理失败的请求。 10....

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    2. **认证和安全**:HttpClient支持多种认证机制,包括基本认证、摘要认证等。同时,它也支持HTTPS,提供了SSL/TLS的安全传输。 3. **重定向处理**:HttpClient可以自动处理HTTP状态码3xx的重定向,也可以手动控制...

Global site tag (gtag.js) - Google Analytics