网络技术-HttpURLConnection

使用HttpURLConnection发送HTTP请求

  • 获取HttpURLConnection对象。一般只需new出一个URL对象,并传入目标的网络地址,然后调用openConnec()方法

    URL url = new URL("http://www.baidu.com");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    
  • 设置HTTP请求所使用的方法(GETPOST

    • GET 方式是表示从服务器那里获取数据
    • POST 方式是表示希望提交数据给服务器
    connection.setRequestMethod("POST");
    
  • 私人订制连接(设置连接超时、读取超时的毫秒数以及服务器希望得到的一些消息头等)

    //设置读取超时
    connection.setReadTimeout(5000);
    //设置连接超时
    connection.setConnectTimeout(5000);
    
  • 调用getInputStream()方法获取到服务器返回的输入流

    InputStream inputStream = connection.getInputStream();
    
  • 调用disconnect()方法将HTTP连接关闭掉

    connection.disconnect();
    

提交数据


GET方式

  • get方式提交的数据是直接拼接在url的末尾(键值对方式)

    final String path = "http://192.168.1.104/Web/servlet/CheckLogin?name=" + name + "&pass=" + pass;
    
  • 发送get请求

    URL url = new URL(path);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    conn.setReadTimeout(5000);
    conn.setConnectTimeout(5000);
    if(conn.getResponseCode() == 200){
        InputStream inputStream = connection.getInputStream();
    }
    
  • 浏览器在发送请求携带数据时会对数据进行URL编码,我们写代码时也需要为中文进行URL编码

    String path = "http://192.168.1.104/Web/servlet/CheckLogin?name=" + URLEncoder.encode(name) + "&pass=" + pass;
    

POST

  • post提交数据是用流写给服务器的

  • 协议头中多了两个属性

    • Content-Type: application/x-www-form-urlencoded,描述提交的数据的mimetype
    • Content-Length: 32,描述提交的数据的长度
    /*给请求头添加post多出来的两个属性*/
    //进行URL编码
    String data = "name=" + URLEncoder.encode(name) + "&pass=" + pass;
    //手动设置两个属性
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    conn.setRequestProperty("Content-Length", data.length() + "");
    
  • 设置允许打开post请求的流

    conn.setDoOutput(true);
    
  • 获取连接对象的输出流,往流里写要提交给服务器的数据

    OutputStream os = conn.getOutputStream();
    os.write(data.getBytes());
    

你可能感兴趣的:(网络技术-HttpURLConnection)