官网:Apache HttpComponents – Apache HttpComponents
常见使用场景:1.爬虫(python相对做爬虫专业,但是java也可以做) 2.与其他应用进行交互时候
注意下,不同的HttpClient的jar包版本,API和包路径有明显不同
先使用JDK原生API请求网页
将控制台的复制保存为html文件
双击打开
request:请求行,请求头,请求体
可以设置请求方式,请求头,等
依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
演示使用HttpClient发送get请求,无参
@Test
public void test1(){
//可关闭的httpclient客户端,相当于打开一个浏览器
CloseableHttpClient closeableHttpClient=HttpClients.createDefault();
String str="https://www.baidu.com";
//构造HttpGet请求对象
HttpGet httpGet=new HttpGet(str);
//声明可关闭响应对象
CloseableHttpResponse response = null;
try {
//可关闭的httpclient客户端对象执行httpGet请求
response=closeableHttpClient.execute(httpGet);
//获取响应结果 注意HttpEntity有很多实现类,不仅仅可以作为响应结果,还可以作为请求的参数实体
//作为响应结果的实现类是DecompressingEntity
HttpEntity httpEntity=response.getEntity();
//对HttpEntity操作的工具类
String toStringResult=EntityUtils.toString(httpEntity, StandardCharsets.UTF_8);
System.out.println(toStringResult);
//确保流关闭
EntityUtils.consume(httpEntity);
} catch (Exception e) {
e.printStackTrace();
}finally {
if(response!=null){
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
if(closeableHttpClient!=null){
try {
closeableHttpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
控制台打印结果和原先一样
关于user-agent和referer:
user-agent意思是用户代理:客户端用的什么浏览器
假如一直用Httpclient连接某些网页,如果对方知道你是机器所为
比如下面这样
可以在请求头里设置user-agent
比如在请求对象里设置:
//构造HttpGet请求对象 HttpGet httpGet=new HttpGet(str); httpGet.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36");
这样一般可以解决httpClient被认为不是真人行为
另外网站为了保护自己,比如爬对方图片,进行防盗链设置
而Referer是用来,解决网站防盗链
每个请求头,都有对应的作用,自己可查看资料
下面演示,一个网站通过浏览器访问后端,后端获取所有请求头,和通过HttpClien发送请求,所得到的请求头有哪些不一样。
该demo一会上传百度云盘
前端就几个表单,做为参数通过get,post,还有文件上传的演示
后端接收,并打印所有由浏览器发起请求的所有请求头
随便用户名,密码,这里输入aaa,密码 bbb 后端得到的所有请求头
然后再实验 账户aaa,密码aaa+bbb
再来看看用HttpClien发送该请求,后端的结果