URL,URLConnection,HttPURLConnection的使用

URLConnection与HttPURLConnection都是抽象类,无法直接实例化对象。其对象主要通过URL的openconnection方法获得。

值得注意的是:
1.openConnection方法只创建URLConnection或者HttPURLConnection实例,但是并不进行真正的连接操作。并且,每次openConnection都将创建一个新的实例。
2.openConnection不进行的连接操作的原因在于,可以在连接操作进行之前,对URLConnection或者HttPURLConnection实例的某些属性进行设置,如设置超时值等。

3.无论URLConnection或者HttPURLConnection实例,其getInputStream之类属于应用层的操作,都会调用connect操作。但是,connectTimeout与ReaderTimeout并不相同。有可能在已连接的情况下,仍然Reader超时

利用HttpURLConnection对象和Internet交互

1.从Internet获取网页
发送请求,将网页以流的形式读回来.
1)创建一个URL对象:URL url = new URL("http://www.sohu.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");
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发送请求参数
1)将地址和参数存到byte数组中:byte[] data = params.toString().getBytes();
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编程.确保程序的稳定性.

URL,URLConnection,HttPURLConnection的使用相关推荐

  1. java的connect和http_【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法

    Java原生的API可用于发送HTTP请求 即java.net.URL.java.net.URLConnection,JDK自带的类: 1.通过统一资源定位器(java.net.URL)获取连接器(j ...

  2. URLConnection HttpURLConnection 网络请求

    基本使用方法 URLConnection 访问网络的文本数据打印下载 try {//创建URL对象参数为网络信息地址URL url = new URL("https://ss1.bdstat ...

  3. URLConnection-URL连接

    [README] 本文介绍了 URLConnection java类,通过 URLConnection 如何获取网络资源: 本文还梳理了涉及网络编程的java类的进化过程:从 URL -> UR ...

  4. Android Tv wifi网络登录认证

    Android Tv wifi网络登录认证 前言 现在商铺.酒店等公共场所的wifi 网络大多数都需要进行网络登录认证,但在android Tv上面系统设置上的wifi模块好像没有对此场景做出处理,必 ...

  5. Android 实战 - 天气(有缺陷)APP

    序言: 临近开学,这是假期最后一篇Android文章,也算是假期学习安卓的一个小小的成果吧. 第一次写Android应用,应用中的不足我会一 一列举出来,同时也希望与大家可以指出我的一些问题与不足,我 ...

  6. android 展示pdf,Android中显示在线PDF

    Android中显示PDF iOS的WebView能从线上url直接显示pdf,而Android的WebView不能直接显示, Android的WebView要显示pdf需要拼接url到google的 ...

  7. android GoogleMap画导航线路图 路径规划(Directions)

    转自:http://blog.csdn.net/mad1989/article/details/9734667 1.0 GoogleMap路径规划 Google Mapandroid版和IOS版的SD ...

  8. java url 设置超时_(转)HttpURLConnection中设置网络超时

    Java中可以使用HttpURLConnection来请求WEB资源. HttpURLConnection对象不能直接构造,需要通过URL.openConnection()来获得HttpURLConn ...

  9. android系统提供了url通信,Android两种HTTP通信,HttpURLConnection和HttpClient

    Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高. 不过HttpURL ...

  10. Android - HttpURLConnection 抛出异常

    HttpURLConnection 抛出异常 本文地址: http://blog.csdn.net/caroline_wendy Http的URL链接, 会发生错误, 主要原因是 在主UI线程中, 使 ...

最新文章

  1. java se 6u111_linux下查看已经安装的jdk 并卸载jdk
  2. Java 洛谷 P1319 压缩技术
  3. java插件获取首选项_Eclipse RCP 中创建自定义首选项,并能读取首选项中的值
  4. pyspark启动时卡住了
  5. ffmpeg java 使用_macos下ffmpeg使用及java调用
  6. mybatis 使用in 查询时报错_MyBatis(四):mybatis中使用in查询时的注意事项
  7. app启动页自动跳转源码_关于移动端App启动页的策划方案
  8. Matlab优化求解器中的Tolerances and Stopping Criteria
  9. Centos系统查看版本
  10. php gmssl,gmssl
  11. 应用--学生宿舍卫生管理系统
  12. Lync客户端更新联系人通讯簿
  13. iOS 警告 Local declaration of 'XXX' hides instance
  14. 天耀18期 - 10.字符串常用方法【作业】
  15. 网易云音乐人申请教程(会唱歌即可)
  16. fortran matlab eng,[转载]关于MATLAB转FORTRAN的几点注意
  17. springboot集成Appollo动态配置
  18. 怎样做中长线股票,中长线炒股技巧有哪些?
  19. SATA3.0中FIS的八种类型
  20. Oscar-实验过程记录

热门文章

  1. 智能一代云平台(三十六):项目中如何做到避免传递依赖
  2. “跨国视频造假窝点”曝光!这个大规模数据集,帮AI揪出99%换脸视频
  3. 请投量子位一票 | 2018年度明星学术公众号评选
  4. Google云也想为中国企业服务,正与腾讯浪潮谈合作
  5. 读取脑磁波,神经网络知道你在「犹豫不定」
  6. eNSP 华为帧中继实验
  7. Okhttp 与 Retrofit的简单介绍及两者间的联系
  8. linux系统学习第六天
  9. Activiti获取当前活动(任务)的出口(动态生成提交按钮)
  10. mysql高可用方案之主从架构(master-slave)