1、什么是HttpClient?

HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

通过Java程序模拟浏览器访问网页,获取网页代码及图片的应用程序。

2、上代码:

在pom.xml中加入依赖关系:

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>

项目代码:

public static void main(String[] args) throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建HttpClient实例
HttpGet httpGet = new HttpGet("http://www.tuicool.com"); // 创建Httpget实例
//设置Http报文头信息
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0");
CloseableHttpResponse response = null;
response = httpClient.execute(httpGet); // 执行http get请求
HttpEntity httpEntity = response.getEntity(); // 获取返回实体
String web = EntityUtils.toString(httpEntity, "utf-8"); // 解析实体
System.out.println("网页内容是:");
System.out.println(web);
                //获取返回信息
String ContentType = httpEntity.getContentType().getValue();
System.out.println("Content-Type:"+ContentType);
System.out.println("Status:"+response.getStatusLine().getStatusCode());//获取返回码:200 404 500等
response.close(); // 关闭response
httpClient.close(); // 关闭HttpClient实体
}

3、请求图片:

1)获取图片后,以InputStream的形式返回,可以通过new File 及 new OutputStream 的方法保存图片。

2)同时也可以通过Apache的工具包(本质上是封装第一种方法,底层实现原理相同)

需要在pom.xml中加入如下依赖关系:

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>

项目代码:

public static void main(String[] args) throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建HttpClient实例
HttpGet httpGet = new HttpGet("http://www.java1234.com/uploads/allimg/170610/1-1F610195021142.jpg"); // 创建Httpget实例
//设置Http报文头信息
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0");
CloseableHttpResponse response = null;
response = httpClient.execute(httpGet); // 执行http get请求
HttpEntity entity = response.getEntity(); // 获取返回实体
if(null != entity){
System.out.println("ContentType:"+entity.getContentType().getValue());
InputStream inputStream = entity.getContent();//返回一个输入流
//输出图片
FileUtils.copyInputStreamToFile(inputStream, new File("D://a.jpg"));//引用org.apache.commons.io.FileUtils
}
response.close(); // 关闭response
httpClient.close(); // 关闭HttpClient实体
}

最新文章

  1. Centos Cacti 0.8.8g
  2. 让HTML5语义化标签兼容IE浏览器
  3. Android Studio调试功能使用总结【转】
  4. ASP.NET MVC 入门系列教程
  5. Toolbar标题栏
  6. MySql之触发器【过度变量 new old】
  7. IE兼容性问题解决方案3--css中的overflow
  8. Simple screenshot that explains the singleton invocation.
  9. 最大公约数(gcd):Euclid算法证明
  10. select into from 和 insert into select 的用法和区别(转)
  11. myeclipse取消js校验
  12. &lt;%@include file=&quot;a.jsp&quot;%&gt; jsp引用jsp文件时候注意
  13. spark算子:partitionBy对数据进行分区
  14. 关于getch()函数
  15. Windows Server 2012设置VMWare以服务方式启动(注销后也可以运行,开机也可以自动运行)
  16. ATR的计算
  17. Cestos7安装Elasticsearch5.4.3
  18. oracle语句insert into select如何加后续插入条件
  19. $(this) 和 this 关键字在 jquery 中有何不同?
  20. tornado源码分析-模块介绍

热门文章

  1. 【spring boot】加载同名Bean解决方法
  2. EF Core中如何设置数据库表自己与自己的多对多关系
  3. Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务
  4. # .NET Core下操作Git,自动提交代码到
  5. MySQL UNION 操作符
  6. 聊聊 .net Core webAPi 的Get和POST 相关(1)
  7. babel plugin和presets是什么,怎么用?
  8. maven 镜像仓库 setting.xml修改 &amp; 手动导入的包如何加到maven里面
  9. flink PageRank详解(批量迭代的页面排名算法的基本实现)
  10. 源码安装rlwrap 0.43(为了方便使用linux下的sqlplus)