HttpClient的基本使用
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。其相比于传统 JDK 自带的 URLConnection,增加了易用性和灵活性。其功能主要是用来向服务器发送请求,并返回相关资源。在网络爬虫实战中,经常使用 HttpClient 获取网页内容,使用 jsoup 解析网页内容。
同上文所提到的也具有POST和GET两种请求方式。
GET方法
public void testGet() throws IOException {
//1.创建HttpClient对象
//new DefaultHttpClient() 这种方法已经过时
CloseableHttpClient httpClient = HttpClients.createDefault();
//2.创建HttpGet请求并进行相关设置
HttpGet httpGet = new HttpGet("http://www.itcast.cn/?username=lgy");
httpGet.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36");
//请求头是从网页控制器中得到的
//3.发起请求
CloseableHttpResponse response = httpClient.execute(httpGet);
//4.判断相应状态码并获取响应数据
if(response.getStatusLine().getStatusCode() == 200){//200表示响应成功
String html = EntityUtils.toString(response.getEntity(),"UTF-8");
System.out.println(html);
}
//5.关闭资源
httpClient.close();
response.close();
}
POST方法
public void testPost() throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://www.itcast.cn/");
//准备集合存放请求参数
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username","java"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
httpPost.setEntity(entity); //设置请求体
httpPost.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36");
CloseableHttpResponse response = httpClient.execute(httpPost);
if((response.getStatusLine().getStatusCode()) == 200){
String html = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println(html);
}
httpClient.close();
response.close();
}
注意POST方法设置请求体需要传递一个集合。