在java网络编程里面URLConnection是个非常重要的类,有了它就可以实现大部分的网络编程。
URL 和 URLConnection的联系和区别?
- urlConnection 提供了比url更多的功能。如果你想从网上下载一个图片、请求一个网页,那么使用url这个类已经完全够用了,因为他提供了openStream()方法获取一个输入流,你就可以得到你想得到的资源了,但是如果出了想获取内容外还想提交一个表单,那url就无能为力了,因为他只读不写。
- urlConnection 提供了读取响应头的功能。出了可以读取到响应体,他还可以读取响应的头信息
- urlconnection 提供了发送发送数据的功能。比如你要提交一个表单。
- urlConnection 在请求的时候,提供了更多的控制选项,比如可以
控制是否可写,
是否 允许交互,
是否使用缓存,
设置底层socket的超时时间,
配置请求的首部
如何获取URLConnection 对象?
URLConnection 是个抽象类,也没有public的构造方法,唯一获取的方式是
- 首先new 一个url对象
- 使用url对象的 getConnection()得到URLConnection 对象
HttpURLConnection 到底牛逼在哪?
HttpURLConnection 是URLConnection的抽象子类,其实我们使用url.getConnection()得到的类就是一个HttpURLConnection对象,这个对象提供了比URLConnection 对象更多好用的方法。
控制请求的方法。可以通过 setRequestMethod()来设置请求的方法,GET POST HEAD PUT DELETE OPTIONS TRACE
主动断开连接。默认情况下URLConnection使用的是keep-alive ,服务器在发送完了最后一个字节(-1)后不会立即关闭连接,如果在次发起请求,会重用底层的socket连接。使用disconnect()方法就可以显示的关闭连接,关闭连接的使用会关闭流,但是关闭流不会关闭这个socket连接
得到响应状态码和消息行。提供了方法getResponseCode和getRespoonseMessage方法来获取状态码好的消息行
控制url 重定向 。默认情况下,如果返回30x的状态码,H团体票Urlconnection会自动的重定向。但是可以通过setFollowRedirects来设置是否允许自动重定向
查看使用了代理。如果中间经过了代理服务器,userProxy方法返回true。
几个常用的http方法
- GET POST 就不说了
- HEAD ,相当于get,但是不反回正文部分,只返回请求头部分
3.OPTIONS, 这个方法可以得到服务端到底支持那些个http方法。
4.TRACE, 如果中间经过了代理服务器,代理服务器可能修改了一些首部,这个方法返回服务器最终接收到的首部是怎样的,这样你就可以知道中间的代理服务器做了那些手脚
5.PUT/DELETE 这些方法顾名思义。但是最终还要依赖于服务端的实现,一般我们在servlet中并没有写这些方法,那么实际上是没有用的。
请求头:content-length,java是如何计算的呢?
java并不是读取一个字节就立即发送到服务器,他是现在整个资源都放在了缓冲里,计算完了长度后在发送的,所以他比较适合发送比较小得表单,对于特别大得表单往往表现不佳。