一:HttpClient简介.
1.1 HttpClient基于Http协议,Java客户端发送请求更加容易便捷,调用第三方接口更加方便了,方便测试接口,提高开发效率,功能非常丰富的组件包.模拟用户使用浏览器请求网站,也可以用于爬取网页数据.
1.2 HttpClient官网:链接.
1.3 HttpClient官网教程:HttpClient教程.
二 HttpClient使用.
2.1 HttpClient引入依赖.
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
2.2 HttpClient简单获取网页首页Html代码.
HttpClient的建立.面向接口编程.HttpClient执行请求.
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
/**
* author:
* date:
* time:
* description:
*/
public class HttpClientUtil {
public static void main(String[] args) throws IOException {
/** 创建httpClient实例*/
CloseableHttpClient httpClient = HttpClients.createDefault();
/** 创建httpget实例*/
HttpGet httpGet = new HttpGet("http://www.baidu.com");
/** 执行http get请求*/
CloseableHttpResponse response = httpClient.execute(httpGet);
/** 返回请求实体*/
HttpEntity entity=response.getEntity();
/** 获取网页内容*/
System.out.println("网页内容:"+ EntityUtils.toString(entity, "utf-8"));
/** 关闭response*/
response.close();
/** 关闭HttpClient*/
httpClient.close();
}
}
运行结果如下:
2.3 HttpClient获取响应状态.
使用CloseableHttpResponse的getStatusLine().getStatusCode()得到响应状态码.
getStatusLine().getProtocolVersion()获取使用的Http协议的版本.
如果换个其他不存在的页面,就会报404错误的.有些服务器防止爬虫采集数据,如果频繁请求,就会报403拒绝请求的.服务器可以理解客户发来的请求,但是拒绝服务.
2.4 HttpClient获取响应内容类型.
使用HttpEntity的getContentType().getName()和getContentType().getValue().根据请求的不同返回不同的响应类型.
2.5 HttpClient设置请求头消息user-agent模拟浏览器.获取User-Agent.浏览器F12可以NetWork查看一个网络请求即可.
例如我们使用HttpClient模拟浏览器访问一个站点. http://www.tuicool.com/
设置一下User-Agent头信息.添加如下.
2.6 HttpClient设置连接读取以及读取超时.
比如连接国外网站,连接时间较长,读取内容比较多.这个时候我们设定时间,如果指定时间内没有连接,业务上就报错了.
RequestConfig()用于请求设置.
RequestConfig config=RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(5000)
.build();
httpGet.setConfig(config);
2.7 HttpClient设置代理IP.
HttpClient用于爬取网页的时候,有的网站有使用反爬虫机制,如果频繁访问站点以及规律性访问,网站会屏蔽IP的.
使用代理IP即可,使用高匿IP.网上有高匿IP可以使用.
HttpHost proxy=new HttpHost("IP", PORT).
RequestConfig requestConfig=RequestConfig.custom().setProxy(proxy).build();