1、是什么?
是用来简化HTTP客户端与服务器进行各种通讯编程。
2、能做什么
简单说:用GET或POST请求,封装好规定格式的URI后,由httpclient执行该请求(execute),发送给服务器后,得到一个response。服务器的响应信息就存在response中。通过响应方法,得到你想要的那部分结果(如:头部信息,响应实体信息、状态行信息)
2.1. 读取网页(HTTP/HTTPS)内容
下面是我们给出的一个简单的例子用来访问某个页面(用post请求)
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(服务器的目标URL);
httpPost.setEntity(new StringEntity(请求参数);
//response是执行post请求后,得到的服务器返回的响应信息
CloseableHttpResponse response = httpclient.execute(httpPost);
try {
HttpEntity entity = response.getEntity();
InputStream in= entity.getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-8"));
String
line;
StringBuffer buf= new StringBuffer();
while
(null != (line = br.readLine())) {
buf.append(line);
}
//获得响应头信息
System.out.println(response.getAllHeaders());
//响应实体
System.out.println(response.getEntity());
//响应状态行
System.out.println(response.getStatusLine());
} finally {
response.close();
}
}
在这个例子中首先创建一个HTTP客户端(HttpClient)的实例,然后选择提交的方法是GET或者POST,最后在HttpClient实例上执行提交的方法,最后从所选择的提交方法中读取服务器反馈回来的结果。这就是使用HttpClient的基本流程。其实用一行代码也就可以搞定整个请求的过程,非常的简单!
2.2模拟输入用户名和口令进行登录
很多网站的内容都只是对注册用户可见的,这种情况下就必须要求使用正确的用户名和口令登录成功后,方可浏览到想要的页面。因为HTTP协议是无状态的,也就是连接的有效期只限于当前请求,请求内容结束后连接就关闭了。在这种情况下为了保存用户的登录信息必须使用到Cookie机制。以JSP/Servlet为例,当浏览器请求一个JSP或者是Servlet的页面时,应用服务器会返回一个参数,名为jsessionid(因不同应用服务器而异),值是一个较长的唯一字符串的Cookie,这个字符串值也就是当前访问该站点的会话标识。浏览器在每访问该站点的其他页面时候都要带上jsessionid这样的Cookie信息,应用服务器根据读取这个会话标识来获取对应的会话信息。
对于需要用户登录的网站,一般在用户登录成功后会将用户资料保存在服务器的会话中,这样当访问到其他的页面时候,应用服务器根据浏览器送上的Cookie中读取当前请求对应的会话标识以获得对应的会话信息,然后就可以判断用户资料是否存在于会话信息中,如果存在则允许访问页面,否则跳转到登录页面中要求用户输入帐号和口令进行登录。这就是一般使用JSP开发网站在处理用户登录的比较通用的方法。
这样一来,对于HTTP的客户端来讲,如果要访问一个受保护的页面时就必须模拟浏览器所做的工作,首先就是请求登录页面,然后读取Cookie值;再次请求登录页面并加入登录页所需的每个参数;最后就是请求最终所需的页面。当然在除第一次请求外其他的请求都需要附带上Cookie信息以便服务器能判断当前请求是否已经通过验证。说了这么多,可是如果你使用httpclient的话,你甚至连一行代码都无需增加,你只需要先传递登录信息执行登录过程,然后直接访问想要的页面,跟访问一个普通的页面没有任何区别,因为类HttpClient已经帮你做了所有该做的事情了,太棒了!下面的例子实现了这样一个访问的过程。
2.3上传下载文件