HttpClient抓取网页Demo
HttpClient是Apache基金会开发的一个Java库,它为Java程序员提供了一个强大的工具来执行HTTP请求并处理响应。HttpClient允许你模拟浏览器行为,发送GET、POST以及其他HTTP方法的请求,并处理服务器返回的各种内容,包括HTML、XML、JSON等。在本文中,我们将深入探讨HttpClient的基本用法,以及如何使用它来抓取网页内容。 你需要在项目中引入HttpClient的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> ``` HttpClient的核心类是`HttpClient`和`HttpGet`。下面是一个简单的HTTP GET请求示例: ```java 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; public class HttpClientDemo { public static void main(String[] args) throws Exception { CloseableHttpClient httpClient = HttpClients.createDefault(); try { HttpGet httpGet = new HttpGet("http://example.com"); System.out.println("Executing request " + httpGet.getRequestLine() + " to " + httpGet.getURI() + " ..."); CloseableHttpResponse response = httpClient.execute(httpGet); try { System.out.println("----------------------------------------"); System.out.println(response.getStatusLine()); HttpEntity entity = response.getEntity(); if (entity != null) { System.out.println("Response content length: " + entity.getContentLength()); String content = EntityUtils.toString(entity, "UTF-8"); System.out.println("Response content: " + content); } } finally { response.close(); } } finally { httpClient.close(); } } } ``` 在这个例子中,我们创建了一个`CloseableHttpClient`实例,然后使用`HttpGet`构造一个GET请求到指定URL。`execute`方法执行请求,返回一个`CloseableHttpResponse`对象,我们可以从中获取状态行、响应体等信息。 如果需要进行POST请求,可以使用`HttpPost`类,并通过`setEntity`方法设置请求体。例如,模拟表单提交: ```java HttpPost httpPost = new HttpPost("http://example.com/form"); List<NameValuePair> params = new ArrayList<>(); params.add(new BasicNameValuePair("key1", "value1")); params.add(new BasicNameValuePair("key2", "value2")); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "UTF-8"); httpPost.setEntity(entity); ``` HttpClient还提供了许多高级功能,如重试策略、连接池管理、HTTPS支持、自定义请求头等。对于复杂的HTTP请求,可以使用`HttpContext`上下文对象存储请求相关的状态和数据。 在实际的网页抓取任务中,通常需要处理各种HTTP状态码,解析HTML内容,甚至可能涉及登录、验证码识别等。HttpClient可以与Jsoup等HTML解析库结合使用,提取页面中的有用信息。 例如,使用Jsoup解析返回的HTML内容: ```java Document doc = Jsoup.parse(content); Elements links = doc.select("a[href]"); for (Element link : links) { System.out.println("\nLink: " + link.attr("href")); System.out.println("Text: " + link.text()); } ``` HttpClient是Java中一个强大且灵活的HTTP客户端库,能够帮助开发者轻松地执行HTTP请求和处理响应。配合其他工具,如Jsoup,可以实现网页抓取、数据提取等任务。对于需要从Web获取信息的项目,HttpClient是一个不可或缺的工具。
- 1
- 粉丝: 3
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (174717862)有源滤波电路1-模电Multisim仿真实验
- (3822212)单片机Proteus仿真
- (481250)Proteus 与单片机 仿真
- (179979052)基于MATLAB车牌识别系统【带界面GUI】.zip
- 计算机网络四次实验报告
- (175549404)基于微信小程序的十二神鹿点餐(外卖小程序)(毕业设计,包括数据库,源码,教程).zip
- (179941432)基于MATLAB车牌识别系统【GUI含界面】.zip
- (179941434)基于MATLAB车牌识别系统【含界面GUI】.zip
- (178021462)基于Javaweb+ssm的医院在线挂号系统的设计与实现.zip
- (178047214)基于springboot图书管理系统.zip
- 1
- 2
- 3
- 4
- 5
- 6
前往页