HttpURLConnection类
导语
java.net.HttpURLConnectin类是URLConnection类的抽象子类。它在处理协议为HTTP的URL时特别有效。具体而言,它通过它可以获取和设置请求方法,确定是否重定向,获取响应码和消息体,以及是否使用代理。由于这个类是一个抽象类,所以不能直接创建它的实例。不过可以通过强转的方式来获取 HttpURLConnection对象。
获取一个HttpURLConnection对象
URL url = new URL("http://www.xdysite.cn/index.php");
HttpURLConnection http = (HttpURLConnection) url.openConnection();
请求方法
HTTP请求中的常用方法包含一下几个
- GET
- POST
- HEAD
- PUT
- DELETE
HEAD
HEAD方法是最简单的方法。这个方法和GET方法很类似。不过,它告诉服务器只返回HTTP首部,不用实际发送消息体。这个方法最常见的用途是检查当前客户端缓存的文件是否与服务器一致(服务器可能会对文件做修改操作)。下面是个使用HEAD请求方法的简单程序,它会显示服务器中一个文件最后一次修改时间。
public static void main(String[] args) throws MalformedURLException {
URL url = new URL("http://www.xdysite.cn/index.html");
try {
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setRequestMethod("HEAD");
System.out.println("该资源最后一次修改时间"+ new Date(http.getLastModified()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
执行结果

服务器资源
http://cgblb.img48.wal8.com/img48/563395_20161212173407/s/148163323406_medium.jpg

这里并不一定非要使用HEAD方法,也可以利用GET来得到同样的结果。不过使用GET方式的话,服务器会发送该资源。而我们只关心首部中的文件的最后修改时间而已。
DELETE
DELETE方法将删除Web服务器上位于指定URL的文件。由于这个请求存在明显的安全风险,所以并非所有的服务器都配置支持这个方法,即使支持该方法通常也需要进行身份认证。典型的请求方式如下:
DELETE /javafaq/2016march.html HTTP/1.1
Host: www.xdysite.cn
Accept: text/html,image/gif,image/jpeg,*;q=0.2
Connection: keep-alive
如果服务器接受这个请求,其响应也与实现有关。有的服务器会删除文件,有的则会将文件放到回收站中。另外一些则只是将这个文件标记为不可读。
PUT
如果我们需要将文件放到Web服务器上,则可以采用该方法。这个方法允许客户端放在网站的抽象层次结构中,而不需要知道网站是如何映射到具体的本地文件系统的。这与FTP正相反,FTP用户必须知道实际的目录结构,而不是服务器的虚拟目录结构。下面显示如何利用PUT方式将一个文件放在Web服务器上
PUT /blog/wp-app.php/service/testput.html HTTP/1.1
Host: www.xdysite.cn
Content-Type: application/xml;type=entry
Content-Length: 329
If-Match: "ertr2361fgt9733"
<?xml version="1.0">
<entry>
<title>The Power of Pomodoros</title>
<author><name>Elliotte Harold</name></author>
</entry>
与删除文件一样,PUT通常也需要进行某种身份认证。而大多数服务器须配置为支持PUT方式
HTTP长连接
HTTP1.1支持长连接,允许通过一个TCP socket发送多个请求和相应。在请求头和响应头中需要显示包含Connection: Keep-Alive元数据。HTTPURLConnection类透明的支持HTTP keep-alive,即默认情况下长连接是打开的。在服务器关闭连接之前,如果再次连接同一个服务器,它会重用socket。
流模式
每个发送给HTTP服务器的请求都有一个HTTP首部。首部中有一个Content-lenght字段,即请求主体中的字节数。不过,写入首部,需要知道主体的长度,但是在写首部的时候可能还不知道主体的长度。正常情况下,对于这个两难的问题,JAVA的解决办法是:对于从HTTPURLConnection获取的OutputStream,会将写入此流的所有内容进行缓存,直到流关闭。此时它就知道主体中有多少个字节了。
这种模式对于表单的短请求很合适。不过,对于非常长的表单或一些SOAP消息,相应时负担很大。因为要缓存整个数据。JAVA为这个问题提供了两个解决方案。如果知道数据的大小,则可以将数据大小告诉HTTPURLConnection对象。如果预先不知道数据大小,则可以使用分块传输方式。
public void setFixedLengthStreamingMode(long contentLength)
通过该API可以告诉HttpURLConnection数据的大小。这样JAVA就会在HTTP首部的Content-Length字段中使用这个数。不过如果最终写入的数据多于或少于这个字节数,则会抛出一个IOException。
public void setChunkedStreamingMode(int chunkLength)
在使用该API设置好块的大小后,然后我们可以通过OutputStream发送数据。每当缓存中的数据量累计到设定的值后,java就会把缓存的中的数据输出。这是数据的发送方式就是块方式(chunked)。
HttpURLConnection类的更多相关文章
- JDK下sun.net.www.protocol.http.HttpURLConnection类-----Http客户端实现类的实现分析
HttpClient类是进行TCP连接的实现类, package sun.net.www.http; import java.io.*; import java.net.*; import java. ...
- [02] URL和HttpURLConnection类
1.URL的概念 统一资源定位符URL(Uniform Resource Locator)是www客户机访问Internet时用来标识资源的名字和地址. URL的基本格式是: <METHOD&g ...
- Android基于HttpUrlConnection类的文件下载
/** * get方法的文件下载 * <p> * 特别说明 android中的progressBar是google唯一的做了处理的可以在子线程中更新UI的控件 * * @param pat ...
- 安卓开发之HttpURLConnection类和Handler类的使用
package com.lidaochen.test; import java.io.ByteArrayOutputStream; import java.io.InputStream; public ...
- HttpUrlConnection类基本使用
这个类用来模拟浏览器向服务器发送请求和接收响应 注意: HttpUrlConnection对象简称huc对象 1)获取huc对象向url构造中传递url字符串,并调用openconnection方法即 ...
- java后台调用HttpURLConnection类模拟浏览器请求(一般用于接口调用)
项目开发中难免遇到外部接口的调用,小生今天初次接触该类,跟着API方法走了一遍,如有不对的地方,还请哆哆指正,拜谢! 1 package com.cplatform.movie.back.test; ...
- HttpURLConnection类的使用
此类以获取天气的一个api地址为例: package javaexcjs; import java.io.BufferedReader; import java.io.OutputStreamWrit ...
- Android的HttpUrlConnection类的GET和POST请求
/** * get方法使用 */ private void httpGet() { new Thread() { @Override public void run() { //此处的LOGIN是请求 ...
- Android使用HttpURLConnection通过POST方式发送java序列化对象
使用HttpURLConnection类不仅可以向WebService发送字符串,还可以发送序列化的java对象,实现Android手机和服务器之间的数据交互. Android端代码: public ...
随机推荐
- ASP.NET MVC5----了解我们使用的@HTML帮助类
20几岁,怕什么. 自己的感觉 说一个自己最近使用AngularJS的感受,我们之前使用mvc进行项目开发都是了解和经常使用HTML的帮助类,来完成我们前端大部分代码的编写,其实在我没有接触Angul ...
- java基础练习 字符串,控制流,日历,日期等
1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...
- 安装XAMPP遇到的问题及解决方法
1.XAMPP无法启动Apache Xampp的获得和安装都十分简单,你只要到以下网址: http://www.apachefriends.org/zh_cn/xampp.html 下载xampp即可 ...
- Spring下ActiveMQ实战
MessageQueue是分布式的系统里经常要用到的组件,一般来说,当需要把消息跨网段.跨集群的分发出去,就可以用这个.一些典型的示例就是: 1.集群A中的消息需要发送给多个机器共享: 2.集群A中消 ...
- python之最强王者(5)——Nunber(数字)
1.Python Number(数字) Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. 以下实例在变量 ...
- AlloyRenderingEngine之Shape
写在前面 不读文章,只对代码感兴趣可以直接跳转到这里 https://github.com/AlloyTeam/AlloyGameEngine 然后star一下,多谢支持:). 游戏或者应用中,不是所 ...
- JavaScript简单分页,兼容IE6,~3KB
简介 兼容IE6+及现代浏览器的简单分页,支持同一页面多个分页. 使用 Browser <link rel="stylesheet" href="css/GB-pa ...
- 【转】推荐10款最热门jQuery UI框架
推荐10款最热门jQuery UI框架 原创 在进行Web开发时,并非所有的库都适合你的项目,但你仍需要收藏一些Web UI设计相关的库或框架,以在你需要的时候,加快你的开发效率.本文为你推荐10款非 ...
- JQuery中隐藏/显示事件函数
1.$("button").click(function(){ $("p").hide(); });2.如果您的网站包含许多页面,并且您希望您的 jQuery ...
- iOS项目iCloud及CloudKit Dashboard运用
CloudKit是苹果推出的基于iCloud的一个云端数据存储服务.其 主要由下面两部分组成: 一个仪表web页面,用于管理公开数据的记录类型. 一组API接口,用于iCloud和设备之间的数据传递. ...