当前位置: 首页 > news >正文

httpclient封装获取响应实体_HttpClient 4.5.2-(三)下载,以流的方式获取响应信息...

紧接上一节,本节记录 【下载,以流的方式获取响应信息】

HttpClient可以让我们模拟浏览器进行访问各个网站,同时也具备访问网络上的某个资源,对其进行下载的功能。我们只需要把响应的信息以流的方式给保存到本地即可。

上代码:

@Test

public void getUriResource() {

String imgUrl = "https://ws3.sinaimg.cn/large/9150e4e5ly1fhnc60l3cdj204r04qaa4.jpg";

// 获取连接客户端工具

CloseableHttpClient httpClient = HttpClients.createDefault();

CloseableHttpResponse response = null;

try {

// 创建POST请求对象

HttpPost httpPost = new HttpPost(imgUrl);

/*

* 添加请求参数

*/

// 创建请求参数

List list = new LinkedList<>();

BasicNameValuePair param1 = new BasicNameValuePair("name", "root");

BasicNameValuePair param2 = new BasicNameValuePair("password", "123456");

list.add(param1);

list.add(param2);

// 使用URL实体转换工具

UrlEncodedFormEntity entityParam = new UrlEncodedFormEntity(list);

httpPost.setEntity(entityParam);

/*

* 添加请求头信息

*/

// 浏览器表示

httpPost.addHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)");

// 传输的类型

httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");

// 执行请求

response = httpClient.execute(httpPost);

// 获得响应的实体对象

HttpEntity entity = response.getEntity();

/*

* 获取到响应信息的流

*/

InputStream is = entity.getContent();

// 包装成高效流

BufferedInputStream bis = new BufferedInputStream(is);

// 写入本地 D 盘

File file = new File("D:/图.jpg");

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));

byte[] byt = new byte[1024 * 8];

Integer len = -1;

while ((len = bis.read(byt)) != -1) {

bos.write(byt, 0, len);

}

bos.close();

bis.close();

} catch (ClientProtocolException e) {

System.err.println("Http协议出现问题");

e.printStackTrace();

} catch (ParseException e) {

System.err.println("解析错误");

e.printStackTrace();

} catch (IOException e) {

System.err.println("IO异常");

e.printStackTrace();

} finally {

// 释放连接

if (null != response) {

try {

response.close();

httpClient.close();

} catch (IOException e) {

System.err.println("释放连接出错");

e.printStackTrace();

}

}

}

}

获取到的图片:

本节完毕,下一节记录【连接超时的配置】

相关文章:

  • python面板数据模型操作步骤_面板数据分析方法步骤全解
  • 属于哪个单元_标配三单元8英寸低音炮!STARKE Echo5.1时尚卫星家庭影院试用
  • python执行不了elif_python为什么会存在if执行了依然会执行elif的情况?
  • android 调用系统自带文件管理器_手机微信QQ接收的文件总是找不到?两个小方法轻松解决...
  • c++获取系统pcm_Klipsch(杰士) RP-8060FA 7.1.4系统—宅声致音视听
  • 情绪调节的自适应_合理调节情绪 阳光快乐成长 ——红旗小学开展主题心理健康教育活动...
  • cad批量偏移插件_大神总结:CAD设计五个段位 你在哪个阶段?
  • 一物一码系统开发多少钱_追溯一物一码溯源系统,追踪生产控制系统
  • execve系统调用_Framework 深入探索之 系统相关服务
  • oracle雾化试图_Oracle 物化视图
  • 路由器桥接以后怎么找到_倒立不敢离墙怎么办?找到平衡只需4个方法,以后倒立不用靠墙...
  • 如何用excel计算断色断码_年薪二十万的造价就是用这套工程量自动计算Excel表格来计算工程量...
  • blob字段乱码怎么处理_这500多个字段引起的问题,大部分DBA都搞不定
  • 参数调整 新部署rac_zCloud如何进行自动化部署?
  • 一部分 数据 迁移_关于系统迁移,有哪些风险?又有哪些促进成功的因素?
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • linux安装openssl、swoole等扩展的具体步骤
  • magento2项目上线注意事项
  • Mysql数据库的条件查询语句
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 电商搜索引擎的架构设计和性能优化
  • 前端
  • 如何设计一个微型分布式架构?
  • 如何在 Tornado 中实现 Middleware
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 应用生命周期终极 DevOps 工具包
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​插件化DPI在商用WIFI中的价值
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二)hibernate配置管理
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (转)nsfocus-绿盟科技笔试题目
  • (转载)(官方)UE4--图像编程----着色器开发
  • ..回顾17,展望18
  • .form文件_SSM框架文件上传篇
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Framework杂记
  • .NET MVC之AOP
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET多线程执行函数
  • .NET关于 跳过SSL中遇到的问题
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • .pyc文件是什么?
  • @KafkaListener注解详解(一)| 常用参数详解
  • @RequestMapping处理请求异常
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ 第一章] JavaScript 简史
  • [2016.7.Test1] T1 三进制异或
  • [Android]如何调试Native memory crash issue
  • [AR]Vumark(下一代条形码)
  • [CQOI 2010]扑克牌