1.HttpURLConnection与HttpClient是什么
HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。
在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。 HttpURLConnection是java的标准类,HttpURLConnection继承自URLConnection,可用于向指定网站发送GET请求,POST请求它在URLConnection的基础上提供了如下便捷的方法:
- int getResponseCode():获取服务器的响应代码。
- String getResponseMessage():获取服务器的响应消息。
- String getResponseMethod():获取发送请求的方法。
- void setRequestMethod(String method):设置发送请求的方法。
在一般情况下,如果只是需要Web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection完全可以胜任。但在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不是通过一个简单的URL就可访问的,可能需要用户登录而且具有相应的权限才可访问该页面。在这种情况下,就需要涉及Session、Cookie的处理了,如果打算使用HttpURLConnection来处理这些细节,当然也是可以实现的,只是处理起来会变得比较麻烦。
为了更好地处理向Web站点请求,包括处理Session、Cookie等细节问题,Apache开源组织提供了一个HttpClient项目,看它的名称就知道,它是一个简单的HTTP客户端(并不是浏览器),可以用于发送HTTP请求,接收HTTP响应。但不会缓存服务器的响应,不能执行HTML页面中嵌入的Javascript代码,也不会对页面内容进行任何解析、处理。
简单来说,HttpClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接。
2.如何使用HttpURLConnection发送请求
发送一个简单的Get请求。
HttpURLConnection-Get Collapse source
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
发送一个简单的Post请求
HttpURLConncetion-Post Collapse source
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
其实我们可以发现,步骤其实都差不多相同,打开Connection,设置好相应的URL,设置好参数和请求头,然后直接发送请求,发送完请求再将获取到的响应使用起来,做相应的处理就行了。
3.如何使用HttpClient发送请求
因为其实之前做的项目中遇到的上传下载等功能其实用到的都HttpClient发送的请求居多,所以其实对HttpClient反倒是比较熟悉一点的。
一个简单的Get请求例子。
HttpClient-Get Collapse source
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
一个上传文件的Post请求例子。
HttpClient-Post Collapse source
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
其实中心步骤就是
- 创建HttpClient对象
- 创建请求对象
- 设置请求内容
- 发送请求
- 使用响应
两者相比较下来的话,个人觉得在简单的请求发送前提下,应该是Http比较简便占优势的,因为其内部已经封装好了很多相应的方法,但是HttpURLConnection可能比较适合自己按想法改动,具体的使用还需进一步的根据相应的情景来决定。