`

android HttpURLConnection

 
阅读更多
  1. HttpURLConnection对象
  2. HttpURLConnection中如何设置网络超时
 

HttpURLConnection对象 

1.从Internet获取网页,发送请求,将网页以流的形式读回来.
 
步骤:
1)创建一个URL对象:URL url = new URL(http://www.baidu.com );

2)利用HttpURLConnection对象从网络中获取网页数据:HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3)设置连接超时:conn.setConnectTimeout(6*1000);

4)对响应码进行判断:if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");

5)得到网络返回的输入流:InputStream is = conn.getInputStream();

6)String result = readData(is, "GBK");

7)conn.disconnect();
总结:
--记得设置连接超时,如果网络不好,Android系统在超过默认时间会收回资源中断操作.
--返回的响应码200,是成功.
--利用ByteArrayOutputStream类,将得到的输入流写入内存.
--在Android中对文件流的操作和JAVA SE上面是一样的.

2.从Internet获取文件

利用HttpURLConnection对象,从网络中获取文件数据.
步骤:
1)创建URL对象,并将文件路径传入:URL url = new URL(http://photocdn.sohu.com/20100125/Img269812337.jpg );

2)创建HttpURLConnection对象,从网络中获取文件数据:HttpURLConnection conn = (HttpURLConnection)
url.openConnection();

3)设置连接超时:conn.setConnectTimeout(6* 1000);

4)对响应码进行判断:if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
5)得到网络返回的输入流:InputStream is = conn.getInputStream();

6)将得到的文件流写出:outStream.write(buffer, 0, len);
总结:
--在对大文件的操作时,要将文件写到SDCard上面,不要直接写到手机内存上.
--操作大文件是,要一遍从网络上读,一遍要往SDCard上面写,减少手机内存的使用.这点很重要,面试经常会被问到.
--对文件流操作完,要记得及时关闭.
3.向Internet发送请求参数
步骤:

 

 

2)创建URL对象:URL realUrl = new URL(requestUrl);

3)通过HttpURLConnection对象,向网络地址发送请求:HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();

4)设置容许输出:conn.setDoOutput(true);

5)设置不使用缓存:conn.setUseCaches(false);
6)设置使用POST的方式发送:conn.setRequestMethod("POST");
          
7)设置维持长连接:conn.setRequestProperty("Connection", "Keep-Alive");

8)设置文件字符集:conn.setRequestProperty("Charset", "UTF-8");

9)设置文件长度:conn.setRequestProperty("Content-Length", String.valueOf(data.length));

10)设置文件类型:conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

11)以流的方式输出.

总结:
--发送POST请求必须设置允许输出
--不要使用缓存,容易出现问题.
--在开始用HttpURLConnection对象的setRequestProperty()设置,就是生成HTML文件头.
4.向Internet发送xml数据
XML格式是通信的标准语言,Android系统也可以通过发送XML文件传输数据.
步骤:
1)将生成的XML文件写入到byte数组中,并设置为UTF-8:byte[] xmlbyte = xml.toString().getBytes("UTF-8");
2)创建URL对象,并指定地址和参数:URL url = new URL(http://localhost:8080/itcast/contanctmanage.do?method=readxml );
3)获得链接:HttpURLConnection conn = (HttpURLConnection) url.openConnection();
4)设置连接超时:conn.setConnectTimeout(6* 1000);
5)设置允许输出conn.setDoOutput(true);
6)设置不使用缓存:conn.setUseCaches(false);
7)设置以POST方式传输:conn.setRequestMethod("POST");          
8)维持长连接:conn.setRequestProperty("Connection", "Keep-Alive");
9)设置字符集:conn.setRequestProperty("Charset", "UTF-8");
10)设置文件的总长度:conn.setRequestProperty("Content-Length", String.valueOf(xmlbyte.length));
11)设置文件类型:conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
12)以文件流的方式发送xml数据:outStream.write(xmlbyte);
总结:

--我们使用的是用HTML的方式传输文件,这个方式只能传输一般在5M一下的文件.
--传输大文件不适合用HTML的方式,传输大文件我们要面向Socket编程.确保程序的稳定性

1)将地址和参数存到byte数组中:byte[] data = params.toString().getBytes();

 

5. HttpURLConnection中如何设置网络超时

Java中可以使用HttpURLConnection来请求WEB资源。
HttpURLConnection对象不能直接构造,需要通过URL.openConnection()来获得HttpURLConnection对象,示例代码如下:
String szUrl = "http://www.baidu.com/";
URL url = new URL(szUrl);
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();

HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时:
System.setProperty("sun.net.client.defaultConnectTimeout", 超时毫秒数字符串);
System.setProperty("sun.net.client.defaultReadTimeout", 超时毫秒数字符串);

其中: sun.net.client.defaultConnectTimeout:连接主机的超时时间(单位:毫秒)
sun.net.client.defaultReadTimeout:从主机读取数据的超时时间(单位:毫秒)

例如:
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000");

JDK 1.5以前的版本,只能通过设置这两个系统属性来控制网络超时。在1.5中,还可以使用HttpURLConnection的父类URLConnection的以下两个方法:
setConnectTimeout:设置连接主机超时(单位:毫秒)
setReadTimeout:设置从主机读取数据超时(单位:毫秒)

例如:
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
urlCon.setConnectTimeout(30000);
urlCon.setReadTimeout(30000);

需要注意的是,笔者在JDK1.4.2环境下,发现在设置了 defaultReadTimeout的情况下,如果发生网络超时,HttpURLConnection会自动重新提交一次请求,出现一次请求调用,请求服务器两次的问题(Trouble)。我认为这是JDK1.4.2的一个bug。在JDK1.5.0中,此问题已得到解决,不存在自动重发现象。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android httpUrlConnection Post方式访问网络简单demo

    在Android开发中,HTTP请求是应用与服务器交互的重要方式之一,`...此外,Android 9.0(Pie)及以上版本不再推荐使用`HttpURLConnection`,而是建议使用`OkHttp`这样的第三方库,它提供了更好的性能和易用性。

    Android HttpURLConnection.getResponseCode()错误解决方法

    正文:我在使用HttpURLConnection.getResponseCode()的时候直接报错是IOException错误,responseCode = -1。一直想不明白,同一个程序我调用了两次,结果有一个链接一直OK,另一个却一直报这个错误。后来发现两个...

    Android HttpUrlConnection json使用方法

    在Android开发中,HttpUrlConnection是用于网络通信的一种基础组件,尤其在处理JSON数据时,它扮演了重要的角色。本文将详细介绍如何使用HttpUrlConnection进行HTTP的POST和GET请求,并处理JSON响应。 首先,理解...

    android HttpURLConnection上传图片demo

    这个"android HttpURLConnection上传图片demo"提供了一个具体的示例,教我们如何使用HttpURLConnection来完成这一任务。HttpURLConnection是Java标准库中的一个类,它允许Android应用程序与HTTP服务器进行通信,执行...

    AndroidHttpURLConnection发送GET请求

    调用URL对象的openConnection( )来获取HttpURLConnection对象实例: HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 设置HTTP请求使用的方法:conn.setRequestMethod("GET"); 设置连接超时,...

    java android httpURLConnection的封装

    综上所述,对java android httpURLConnection的封装,涉及到接口设计、HTTP协议的理解、字符编码的处理、请求与响应的封装、网络异常的处理等多个知识点。封装的目的在于提高代码复用率、提高开发效率和提升用户体验...

    Android-使用HttpURLConnection实现断点续传

    HttpURLConnection是Java标准库提供的一种网络连接接口,适用于Android系统,它提供了更高效、更灵活的网络通信方式。本文将详细介绍如何利用HttpURLConnection实现Android应用中的断点续传功能。 首先,理解断点续...

    Android HttpURLConnection 读取网络图片.rar

     HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();// 取得连接  conn.connect();  InputStream is = conn.getInputStream();//取得返回的InputStream  bitmap = BitmapFactory....

    Android移动开发-使用HttpURLConnection实现多线程的下载

    实例Demo程序来示范使用HttpURLConnection实现多线程下载。 使用多线程下载文件可以更快完成文件的下载,因为客户端启动多条线程进行下载就意味着服务器也需要为该客户端提供响应的服务。假设服务器同时最多服务100...

    Android 简单使用 HttpURLConnection

    本篇文章将深入探讨如何在Android中简单使用`HttpURLConnection`进行网络请求。 首先,了解`HttpURLConnection`的基本用法。在Android中,网络操作通常在子线程(非UI线程)中进行,以避免阻塞主线程导致应用无响应...

    android HttpURLConnection,AsyncHttpClient网络请求实例

    综上所述,Android应用开发中的网络请求是一个关键领域,掌握HttpURLConnection和AsyncHttpClient的使用对于编写高效、稳定的网络功能至关重要。在实践中,应根据项目需求和团队偏好灵活选择合适的网络请求库,并...

    Android HttpURLConnection中 StrictMode同时支持3.0以上和3.0以下版本

    在`TestStrictMode`这个示例文件中,可能包含了实现上述策略的一种或多种方法,以确保`HttpURLConnection`在网络请求时能同时兼容Android 3.0及以上的`StrictMode`和2.x版本。通过学习和分析这个示例,开发者可以更...

    Android HttpURLConnection断点下载(单线程)

    本篇文章主要探讨如何使用`HttpURLConnection`实现Android的断点下载功能,这尤其适用于大文件下载场景。 `HttpURLConnection`是Android系统自带的HTTP请求库,相较于已弃用的`HttpClient`,它提供了更现代、更高效...

    android+httpurlconnection

    本项目聚焦于如何利用HTTPURLConnection实现从网络上下载图片并显示在Android Activity中。这个过程涉及到网络请求、多线程处理、数据解码以及UI更新等多个关键知识点。 首先,我们来讲解HTTPURLConnection的基本...

    本示例使用HttpUrlConnection实现上传文件

    在Android开发中,有时我们需要将本地的文件...通过理解以上步骤和注意事项,开发者可以有效地利用HttpURLConnection在Android应用中实现代理文件上传功能。同时,了解服务器端如何接收和处理这些文件也是至关重要的。

    Android基于HttpUrlConnection类的文件下载实例代码

    Android基于HttpUrlConnection类的文件下载实例代码 Android操作系统中,文件下载是一种常见的功能,为了实现文件下载,Android提供了多种方式,包括使用HttpUrlConnection类和OkHttp库等。HttpUrlConnection类是...

    Android HttpURLConnection

    Android English book,very much good!

    Android利用Http下载文件

    在Android中,我们通常使用HttpURLConnection或者第三方库如OkHttp来发起Http请求并接收响应。 1. **使用HttpURLConnection下载文件**: - 首先,建立网络连接,通过`URL.openConnection()`创建HttpURLConnection...

    HttpURLConnection调用.net WebService

    相比于常用的`HttpClient`,`HttpURLConnection`具有更好的性能和资源管理,是Android官方推荐的网络通信方式。通过`HttpURLConnection`,我们可以构建HTTP请求,设置请求头,发送数据,并接收服务器响应。 **二、...

Global site tag (gtag.js) - Google Analytics