@Author: iiusky
    在java中,Java抽象出来了一个URLConnection类,它用来表示应用程序以及与URL建立通信连接的所有类的超类,通过URL类中的openConnection方法获取到URLConnection的类对象。
    Java中URLConnection支持的协议可以在sun.net.www.protocol看到。
    1. URLConnection - 图1
    由上图可以看到,支持的协议有以下几个(当前jdk版本:1.7.0_80):

    1. 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发起一个简单的请求

    1. public class URLConnectionDemo {
    2. public static void main(String[] args) throws IOException {
    3. URL url = new URL("https://www.baidu.com");
    4. // 打开和url之间的连接
    5. URLConnection connection = url.openConnection();
    6. // 设置请求参数
    7. connection.setRequestProperty("user-agent", "javasec");
    8. connection.setConnectTimeout(1000);
    9. connection.setReadTimeout(1000);
    10. ...
    11. // 建立实际连接
    12. connection.connect();
    13. // 获取响应头字段信息列表
    14. connection.getHeaderFields();
    15. // 获取URL响应
    16. connection.getInputStream();
    17. StringBuilder response = new StringBuilder();
    18. BufferedReader in = new BufferedReader(
    19. new InputStreamReader(connection.getInputStream()));
    20. String line;
    21. while ((line = in.readLine()) != null) {
    22. response.append("/n").append(line);
    23. }
    24. System.out.print(response.toString());
    25. }
    26. }

    大概描述一下这个过程,首先使用URL建立一个对象,调用url对象中的openConnection来获取一个URLConnection的实例,然后通过在URLConnection设置各种请求参数以及一些配置,在使用其中的connect方法来发起请求,然后在调用getInputStream来获请求的响应流。
    这是一个基本的请求到响应的过程。