java实现http客户端
一、http概述
http: 超文本传输协议,基于TCP协议之上的一种请求-响应协议
(浏览器和服务器之间首先建立TCP连接,然后进行通信)
1、http请求
由header和body构成
header头组成:
请求方法 路径 http版本
host:域名或ip
user-agent:客户端类型
accept:客户端能处理的http响应格式
accept-language:客户端接收的语言
1.1、get请求
只有header,没有body get请求的参数必须附加在url上,并以urlencode方式编码
因为URL长度限制,get请求参数不能太多
1.2、post请求
post请求:
header中通常要设置
content-type:表示body类型
content-length:表示body长度
请求中带有body,空行分隔
请求参数必须放到body中 请求参数编码格式,在content-type中设置
2、http响应
由header和body组成
header头组成:
http版本 响应代码 响应说明
content-type:表示body类型
content-length:表示body长度
2.1、响应代码
响应代码类型:
1xx:表示一个提示性响应;
2xx:表示一个成功响应;
3xx:表示一个重定向响应;
4xx:表示客户端问题导致的错误响应;
5xx:表示服务器问题导致的错误响应
HTTP/1.0协议(早期的http版本),每次发送请求,客户端都要先创建一个tcp连接,比较耗时;
HTTP/1.1协议允许在一个TCP连接中反复发送-响应,效率大大提高 ;
HTTP/2.0允许客户端在没有收到响应的时候,发送多个HTTP请求
二、java实现http客户端
3、调用get请求
早期的JDK版本是通过HttpURLConnection访问HTTP
//通过给定的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