signed

QiShunwang

“诚信为本、客户至上”

java实现http客户端

2021/6/3 17:29:17   来源:

java实现http客户端

  • http概述
    • http请求
      • get请求
      • post请求
    • http响应
      • 响应代码
  • java实现http客户端
    • 调用get请求
    • 调用post请求

http概述

http: 超文本传输协议,基于TCP协议之上的一种请求-响应协议
(浏览器和服务器之间首先建立TCP连接,然后进行通信)

http请求

由header和body构成

header头组成:
请求方法 路径 http版本
host:域名或ip
user-agent:客户端类型
accept:客户端能处理的http响应格式
accept-language:客户端接收的语言

get请求

只有header,没有body get请求的参数必须附加在url上,并以urlencode方式编码
因为URL长度限制,get请求参数不能太多

post请求

post请求:
header中通常要设置
content-type:表示body类型
content-length:表示body长度
请求中带有body,空行分隔
请求参数必须放到body中 请求参数编码格式,在content-type中设置

http响应

由header和body组成

header头组成:
http版本 响应代码 响应说明
content-type:表示body类型
content-length:表示body长度

响应代码

响应代码类型:
1xx:表示一个提示性响应;
2xx:表示一个成功响应;
3xx:表示一个重定向响应;
4xx:表示客户端问题导致的错误响应;
5xx:表示服务器问题导致的错误响应

HTTP/1.0协议(早期的http版本),每次发送请求,客户端都要先创建一个tcp连接,比较耗时;
HTTP/1.1协议允许在一个TCP连接中反复发送-响应,效率大大提高 ;
HTTP/2.0允许客户端在没有收到响应的时候,发送多个HTTP请求

Java如何使用HTTP客户端编程
早期的JDK版本是通过HttpURLConnection访问HTTP

java实现http客户端

调用get请求

       //通过给定的URL字符串创建URL
        URL url = new URL("https://blog.csdn.net/ococotwd?spm=1011.2124.3001.5113");
       //打开一个URL连接,并运行客户端访问资源。
       //openConnection() 返回一个 java.net.URLConnection。
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setRequestMethod("GET");
        conn.setUseCaches(false);
        conn.setConnectTimeout(5000);
        // 设置HTTP头:
        conn.setRequestProperty("Accept", "*/*");
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 11; Windows NT 5.1)");
        // 连接并发送HTTP请求:
        conn.connect();
        
        // 判断HTTP响应是否200:
        if (conn.getResponseCode() != 200) {
            throw new RuntimeException("bad response");
        }
        // 获取响应内容:
        BufferedReader reader= new BufferedReader(
                new InputStreamReader(conn.getInputStream()));
        StringBuffer strbuf= new StringBuffer();
        String current;
        while((current = reader.readLine()) != null)
        {
            strbuf.append(current);
        }
         reader.close();

调用post请求

      URL url = new URL(PostURL);
      HttpURLConnection conn = (HttpURLConnection)url.openConnection();
      conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
      conn.setRequestMethod("POST");
      conn.setUseCaches(false);
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setConnectTimeout(80000);
      conn.setReadTimeout(0);
      //获取输入参数,用于写入资源
      DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
      dos.write(params.getBytes("utf-8"));
      dos.flush();
      
      BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
      String line = null;
      
      while ((line = reader.readLine()) != null) {
        strBuf.append(line);
      }
      dos.close();
      reader.close();