@Author: iiusky
在java中,Java抽象出来了一个URLConnection
类,它用来表示应用程序以及与URL建立通信连接的所有类的超类,通过URL
类中的openConnection
方法获取到URLConnection
的类对象。
Java中URLConnection支持的协议可以在sun.net.www.protocol
看到。
由上图可以看到,支持的协议有以下几个(当前jdk版本:1.7.0_80):
file ftp mailto http https jar netdoc gopher
虽然看到有gopher
,但是gopher
实际在jdk8版本以后被阉割了,jdk7高版本虽然存在,但是需要设置具体可以看[https://bugzilla.redhat.com/show_bug.cgi?id=865541](https://bugzilla.redhat.com/show_bug.cgi?id=865541)
以及[http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/rev/8067bdeb4e31](http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/rev/8067bdeb4e31)
其中每个协议都有一个Handle
,Handle
定义了这个协议如何去打开一个连接。
我们来使用URL发起一个简单的请求
public class URLConnectionDemo {
public static void main(String[] args) throws IOException {
URL url = new URL("https://www.baidu.com");
// 打开和url之间的连接
URLConnection connection = url.openConnection();
// 设置请求参数
connection.setRequestProperty("user-agent", "javasec");
connection.setConnectTimeout(1000);
connection.setReadTimeout(1000);
...
// 建立实际连接
connection.connect();
// 获取响应头字段信息列表
connection.getHeaderFields();
// 获取URL响应
connection.getInputStream();
StringBuilder response = new StringBuilder();
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
response.append("/n").append(line);
}
System.out.print(response.toString());
}
}
大概描述一下这个过程,首先使用URL建立一个对象,调用url
对象中的openConnection
来获取一个URLConnection
的实例,然后通过在URLConnection
设置各种请求参数以及一些配置,在使用其中的connect
方法来发起请求,然后在调用getInputStream
来获请求的响应流。
这是一个基本的请求到响应的过程。