HTTP访问的两种方式:HttpURLConnection和HTTPClient的比较
http://blog.sina.com.cn/s/blog_87216a0001014sm7.html
http://www.2cto.com/kf/201305/208770.html
------------------------------------------------------------
http://superonion.iteye.com/blog/1545496
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对象。
- 如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
- 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
- 调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法返回一个HttpResponse。
- 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
1.概念
HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。
除此之外,在Android中,androidSDK中集成了Apache的HttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议工具包,并且它支持 HTTP 协议最新的版本和建议。使用HttpClient可以快速开发出功能强大的Http程序。
2.区别
HttpClient是个很不错的开源框架,封装了访问http的请求头,参数,内容体,响应等等,
HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等。
http://hi.baidu.com/wendaoeryu/item/fc2264add98fbde614329bf0
-------------------------------------------------------------------------
使用HttpClient:
NameValuePair nameValuePair1 = new BasicNameValuePair("name", "yang");
NameValuePair nameValuePair2 = new BasicNameValuePair("pwd","123123");
List nameValuePairs = new ArrayList();
nameValuePairs.add(nameValuePair1);
nameValuePairs.add(nameValuePair2);
String validateURL = "http://10.0.2.2:8080/testhttp1/TestServlet";
try {
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,5000); //设置连接超时为5秒
HttpClient client = new DefaultHttpClient(httpParams); // 生成一个http客户端发送请求对象
HttpPost httpPost = new HttpPost(urlString); //设定请求方式
if (nameValuePairs!=null && nameValuePairs.size()!=0) {
//把键值对进行编码操作并放入HttpEntity对象中
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8));
}
HttpResponse httpResponse = client.execute(httpPost); // 发送请求并等待响应
// 判断网络连接是否成功
if (httpResponse.getStatusLine().getStatusCode() != 200) {
System.out.println("网络错误异常!!!!");
return false;
}
HttpEntity entity = httpResponse.getEntity(); // 获取响应里面的内容
inputStream = entity.getContent(); // 得到服务气端发回的响应的内容(都在一个流里面)
// 得到服务气端发回的响应的内容(都在一个字符串里面)
// String strResult = EntityUtils.toString(entity);
} catch (Exception e) {
System.out.println("这是异常!");
}
使用HttpURLConnection:
String validateURL="http://10.0.2.2:8080/testhttp1/TestServlet?name=yang&pwd=123123";
try {
URL url = new URL(validateUrl); //创建URL对象
//返回一个URLConnection对象,它表示到URL所引用的远程对象的连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000); //设置连接超时为5秒
conn.setRequestMethod("GET"); //设定请求方式
conn.connect(); //建立到远程对象的实际连接
//返回打开连接读取的输入流
DataInputStream dis = new DataInputStream(conn.getInputStream());
//判断是否正常响应数据
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
System.out.println("网络错误异常!!!!");
return false;
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("这是异常!");
} finally {
if (conn != null) {
conn.disconnect(); //中断连接
}
HTTP访问的两种方式:HttpURLConnection和HTTPClient的比较的更多相关文章
- System.Web.Http.Cors配置跨域访问的两种方式
System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...
- JavaScript对象属性访问的两种方式
JavaScript对象属性访问的两种方式 object.attribute object["attribute"] 例如: var employees = [ { "f ...
- HTTP访问的两种方式(HttpClient+HttpURLConnection)整合汇总对比(转)
在Android上http 操作类有两种,分别是HttpClient和HttpURLConnection,其中两个类的详细介绍可以问度娘. HttpClient: HttpClient是Apache ...
- HTTP访问的两种方式(HttpClient+HttpURLConnection)整合汇总对比
HttpClient: HttpClient是Apache Jakarta Common下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版 ...
- JVM中对象访问定位两种方式
1.通过句柄方式访问, 在Java堆中分出一块内存进行存储句柄池,这样的话,在栈中存储的是句柄的地址 优点: 当对象移动的时候(垃圾回收的时候移动很普遍),这样值需要改变句柄中的指针,但是栈中的指针不 ...
- ajax实现跨域访问的两种方式
一.使用jsonp实现跨域请求 在前端开发这中你会发现,所有带src属性的标签都可以跨域访问其他服务器文件.jsonp实现的原理也是如此. 以jsonp的数据类型进行请求时,JQ会动态在页面中添加sc ...
- Nginx部署静态页面及引用图片有效访问的两种方式
nginx安装百度一下有很多,直接正题: 静态文件目录结构 file#文件位置 /home/service/file/ css js images html fonts 配置nginx.conf核心代 ...
- Nginx配置同一个域名同时支持http与https两种方式访问
Nginx配置同一个域名http与https两种方式都可访问,证书是阿里云上免费申请的 server{listen 80;listen 443 ssl;ssl on;server_name 域名;in ...
- 网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别
1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2 ...
随机推荐
- spring获取webapplicationcontext,applicationcontext几种方法详解(转载)
转载自 http://www.blogjava.net/Todd/archive/2010/04/22/295112.html 方法一:在初始化时保存ApplicationContext对象 代码: ...
- Linux系统的运行级的概念
Linux OS 将操作 环境分为以下7个等级,即 0:关机 1:单用户模式(单用户.无网络) 2:无网络支持的多用户模式(多用户.无网络) 3:有网络支持的多用户模式(多用户.有网络) 4:保留,未 ...
- AngularJS Backbone.js Ember.js 对比
看到一篇关于AngularJS Backbone Ember.js的对比,建议看一看 说说个人的观点(本人学艺不精,只是个人的观点,不保证观点完全正确,请轻拍): backbone.js 短小精悍,非 ...
- Hadoopd 单元测试-MPUnit
Apache 版: 官网:http://mrunit.apache.org 教程:https://cwiki.apache.org/confluence/display/MRUNIT/MRUnit+T ...
- Visual Studio for mac从入门到放弃1
MAC 第一步:从微软官网下载:https://www.visualstudio.com/vs/visual-studio-mac/ 第二步:安装软件过程出现 It was not possible ...
- css+html+JQuery 万能弹出层,居中显示
function ShowMsg(str) {//要提示的文字 $(".payment_time_mask").remove(); $("body").appe ...
- Caliburn.Micro 资源随时添加
Caliburn.Micro – Hello World http://buksbaum.us/2010/08/01/caliburn-micro-hello-world/ http://blog.c ...
- SQL 判断数据库是否有相关表 字段
--判断数据库是否有相关表 if exists (select 1 from sysobjects where id = object_id(' 表名 ') and type = ' U ' ); - ...
- Neutron FWaaS 原理
理解概念 Firewall as a Service(FWaaS)是 Neutron 的一个高级服务.用户可以用它来创建和管理防火墙,在 subnet 的边界上对 layer 3 和 layer 4 ...
- 六、linux目录结构知识
1.显示行号: cat -n 2.set nu 3.tail -f a.txt 查看文件的尾部变化 4.w 当前的登陆用户 5.yum包管理工具底层调用的还是 rpm -ivh 包名 ...