与URL类相比,URLConnection对与服务器(特别是HTTP服务器)的交互提供了更多的控制。

1)提供了对首部的访问

2)可以配置发送给服务器的请求参数

3)除了读取还可以向服务器写入数据

URLConnection可以检查服务器发送的首部,并相应地做出响应,可以设置客户端请求中使用的首部字段,可以用POST、PUT和其他HTTP请求方法想服务器发回数据。

URLConnection是Java的协议处理器(protocol handler)机制的一部分,这个机制还包括URLStreamHanlder类。协议处理器的思想很简单,将处理协议的细节与处理特定数据类型分开,提供相应的用户接口,并完成完整web浏览器所完成的其他操作。

使用URLConnection类的程序遵循以下基本步骤:

1)构造一个URL对象

2)调用这个URL对象的openConnection获取一个对应该URL的URLConnection对象

3)配置这个URLConnection

4)读取首部字段

5)获取输入流并读取数据

6)获取输出流并写入数据

7)关闭连接

第一次构造URLConnection是未连接的,本地和远程主机无法发送和接受数据。没有socket连接这两个主机。

connect方法在本地和远程主机之间建立一个连接(一般使用TCP socket,但也可能通过其他机制建立),这样就可以收发数据了。

对于getInputSteam、getConnect、getHeaderField和其他要求打开连接的方法,如果连接尚未打开,它们就会调用connect方法。因此,你很少需要直接调用connect方法。

1、读取服务器数据

1)构造一个URL对象

2)调用这个URL对象的openConnection方法,获取对应URL的URLConnection对象

3)调用这个URLConnection的getInputStream方法

4)使用常用的流API读取输入流

2、读取首部

一般来说,HTTP首部可能包括所请求文档的内容类型、文档长度(字节数)、对内容编码所采用的字符集、日期时间、内容的过期时间以及内容的最后修改日期。

3、写入数据

URLConnection在默认情况下不允许输出,所以在请求输出流之前必须调用setDoOutput(true)方法。

HttpURLConnection是URLConnection的子类,提供了额外的方便处理http URL的帮助方法,可以获取和设置请求方法、确定是否重定向、获得响应码和消息、确定是否使用了代理服务器、便于记忆的对应各种HTTP响应码的常量。

HTTP1.1支持持久连接,允许通过一个TCP socket发送多个请求和响应,不过使用Keep-Alive时,服务器不会因为已经向客户端发送了最后一个字节的数据就立即关闭连接,毕竟,客户端有可能还会发送另一个请求,服务器会超时并关闭连接,可能会有5秒处于非活动状态,不过,最好还是由客户端在确认工作结束后关闭连接。

HttpURLConnection默认支持Keep-Alive,在服务器关闭连接之前,如果再次连接同一个服务器,会重用socket,一旦知道与一个特定主机的会话结束,disconnect方法允许客户端断开连接。如果这个连接上还有打开的流,disconnect方法将关闭这些流。不过,反过来不成立,关闭一个持久连接上的流时,并不会关闭这个socket断开连接。

在发送请求时,首部在主体前面,不过要写入首部,需要知道主体的长度,Java的解决方法是获取output stream,缓存其内容,直到流关闭,然后就知道主体有多少字节,然后写入首部的content-length。不过这样在发送第一个字节之前,必须先等待最后一个字节写入,不是很高效。

如果事先知道主体内容大小,可以将长度传递给setFixedLengthStreamingMode,采用流模式。

java的URLConnection相关推荐

  1. Java 使用 URLConnection 模拟 Http Get和Post 提交

    2019独角兽企业重金招聘Python工程师标准>>> Java 使用 URLConnection 模拟 Http Get和Post 提交. 1.URLConnectionHelpe ...

  2. 通过java.net.URLConnection发送HTTP请求的方法

    2019独角兽企业重金招聘Python工程师标准>>> 1.GET与POST请求的区别 a) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, b) ...

  3. 通过java.net.URLConnection发送HTTP请求

    为什么80%的码农都做不了架构师?>>>    最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给服务器,post与get ...

  4. java消费者中url找不到,java – URL可以使用浏览器访问,但是仍然是具有URLConnection的FileNotFoundException...

    我使用HttpURLConnection连接到一个网站,并收到一个ResponseCode = 404(HTTP_NOT_FOUND).但是,我的浏览器(IE)中打开网站没有问题. 为什么有区别,我能 ...

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

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

  6. Java 网络编程:必知必会的 URL 和 URLConnection

    java.net.URL 类将 URL 地址进行了封装,并提供了解析 URL 地址的基本方法,比如获取 URL 的主机名和端口号.java.net.URLConnection 则代表了应用程序和 UR ...

  7. Java网页爬虫--基于URLConnection的网页爬虫工具类

    在这个数据为王的时代,爬虫应用地越来越广泛,对于一个萌新程序员来说如果你要做爬虫,那么Python是你的不二之选.但是对于那些老腊肉的Java程序员(亦或者你是程序媛)想使用Java做爬虫也不是不行, ...

  8. HttpUrlConnection底层实现和关于java host绑定ip即时生效的设置及分析

    最近有个需求需要对于获取URL页面进行host绑定并且立即生效,在java里面实现可以用代理服务器来实现:因为在测试环境下可能需要通过绑定来访问测试环境的应用 实现代码如下: public stati ...

  9. java基于http协议编程_Java中基于HTTP协议网络编程

    java中为我们的网络支持提供了java.net包,能够使我们以编程的方式来访问Web服务功能,这篇博客,就跟大家分享一下,Java中的网络编程的知识,主要是学习下该java.net包下的API. U ...

最新文章

  1. 限制TensorFlow只在CPU上运行的方法
  2. 无法删除文件,文件或目录损坏且无法读取的解决
  3. git/gitee操作手册
  4. 为什么说 Rust 是编程的未来?
  5. 数据冲突Statspack ORA-00001 unique constraint violated错误的解决
  6. xgboost算法_Xgboost调参小结
  7. 自定义百度网盘加密分享密码
  8. SQL语法之PRIMARY KEY 约束
  9. 华为注册“花瓣编程”,释放了什么信号?
  10. JavaWeb进阶之路:MyBatis-配置解析
  11. 已知信码序列为1011_某一个数据通信系统采用CRC校验方式,其中:生成多项式G(X)=...
  12. 什么是JavaBean?什么是Bean?
  13. go 中 结构体 map互转
  14. GooglePhoto设置壁纸----壁纸裁剪界面配置
  15. mysql查询名字叫小明的_MySQL(命令和查询语句)
  16. Alevin——虚拟网络仿真平台
  17. 方案开发,做一个口袋秤的芯片方案设计
  18. 查询app android版本,企业名录查询APP
  19. 详解10种解决启动故障的方法
  20. 万物皆可元宇宙?警惕资本炒作,识破韭菜骗局

热门文章

  1. 三、Linux 开机、重启和用户登录注销
  2. 实用常识 | 分享一个好用的插件解决浏览器图片下载问题(老白嫖怪了)
  3. vue生命周期,vue执行顺序图,钩子函数
  4. 短网址缩短和还原综合源码
  5. 免費玩雲端運算,Amazon Web Service 雲端運算平台攻略 【1】
  6. [手把手教]discuzX2插件制作教程__最菜鸟级别的入门坎 一
  7. 文本框 价格 保留两位小数 讨论
  8. jquery:TypeError: $(...).on is not a function
  9. Swift中文教程(十八) 类型检查
  10. __call、__set 和 __get的用法