使用httpclient下载 页面、图片
代码
import java.io.IOException;
import java.io.UnsupportedEncodingException; import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class MyHttpClientUtils { private static Logger logger = LoggerFactory.getLogger(MyHttpClientUtils.class); private static final int HTTPCLIENT_TIMEOUT = 5000; public static Tuple2<Boolean,String> getPageByUrl(String pageUrl, String encode) throws UnsupportedEncodingException{
logger.info("pageurl=" + pageUrl);
String body = null;
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(HTTPCLIENT_TIMEOUT) //socket超时
.setConnectTimeout(HTTPCLIENT_TIMEOUT) //connect超时
.build();
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultRequestConfig(requestConfig)
.build();
HttpGet httpGet = new HttpGet(pageUrl);
try {
CloseableHttpResponse response = httpClient.execute(httpGet);
String statusCode = String.valueOf(response.getStatusLine().getStatusCode());
logger.info("getStatusCode=" + response.getStatusLine().getStatusCode());
if(response.getStatusLine().getStatusCode() != 200) {
logger.info("返回码异常:" + response.getStatusLine().getStatusCode());
return new Tuple2<Boolean, String>(false, null);
}
body = EntityUtils.toString(response.getEntity(), encode);
// System.out.println("body=" + body);
} catch (IOException e) {
System.out.println("----------Connection timeout--------");
// return ne
}
return new Tuple2<Boolean, String>(true, body);
} public static Tuple2<Boolean,byte[]> getPicByteArray(String picUrl) throws ClientProtocolException, IOException {
logger.info("下载url=" + picUrl);
RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).setConnectionRequestTimeout(HTTPCLIENT_TIMEOUT).setConnectTimeout(HTTPCLIENT_TIMEOUT).build();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig).build();
HttpGet httpGet = new HttpGet(picUrl);
CloseableHttpResponse response = httpClient.execute(httpGet); logger.info("返回的状态码:" + response.getStatusLine().getStatusCode());
if(response.getStatusLine().getStatusCode() == 200) {
byte[] bytes = EntityUtils.toByteArray(response.getEntity());
return new Tuple2<>(true, bytes);
}else{
return new Tuple2<>(false, null);
}
}
}
package testGetpic; import java.io.FileOutputStream;
import java.io.IOException; import org.apache.http.Header;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
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 TestPic2 { public static void main(String[] args) throws IOException{
RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).setConnectionRequestTimeout(6000).setConnectTimeout(6000).build();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig).build();
HttpGet httpGet = new HttpGet("http://xxxx.com/abc.jpg");
CloseableHttpResponse response = httpClient.execute(httpGet);
Header[] headerArray = response.getAllHeaders();
for(Header h : headerArray) {
System.out.println(h.getName());
System.out.println(h.getValue());
System.out.println("======");
} System.out.println("---------------"); System.out.println(response.getStatusLine().getStatusCode());
if(response.getStatusLine().getStatusCode() == 200) { // for(Header h :response.getAllHeaders()){
// System.out.println(h.getElements().length);
// for(HeaderElement he :h.getElements()){
// System.out.println("pc=" + he.getParameterCount());
// }
// System.out.println( h.getName() );
// System.out.println( h.getValue() );
// } byte[] b = EntityUtils.toByteArray(response.getEntity());
FileOutputStream fos = new FileOutputStream("test2.jpg");
fos.write(b);
fos.close();
} } }
使用httpclient下载 页面、图片的更多相关文章
- Android采用HttpClient下载图片
在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...
- 项目遇到的小问题(关于vue-cli中js点击事件不起作用和iconfont图片下载页面css样式乱的解答)
第一个:关于vue-cli中js点击事件不起作用 在vue的methods方法queryBtnFun()中拼接html和click操作事件的时候,发现点击事件一起未起作用: 后来发现是DOM执行顺序 ...
- python 爬虫之requests爬取页面图片的url,并将图片下载到本地
大家好我叫hardy 需求:爬取某个页面,并把该页面的图片下载到本地 思考: img标签一个有多少种类型的src值?四种:1.以http开头的网络链接.2.以“//”开头网络地址.3.以“/”开头绝对 ...
- C#获取网页的HTML码、下载网站图片、获取IP地址
1.根据URL请求获取页面HTML代码 /// <summary> /// 获取网页的HTML码 /// </summary> /// <param name=" ...
- 批量下载网站图片的Python实用小工具
定位 本文适合于熟悉Python编程且对互联网高清图片饶有兴趣的筒鞋.读完本文后,将学会如何使用Python库批量并发地抓取网页和下载图片资源.只要懂得如何安装Python库以及运行Python程序, ...
- [记录][python]python爬虫,下载某图片网站的所有图集
随笔仅用于学习交流,转载时请注明出处,http://www.cnblogs.com/CaDevil/p/5958770.html 该随笔是记录我的第一个python程序,一个爬去指定图片站点的所有图集 ...
- php下载远程图片方法总结(curl手动解析header)curl跳转问题解决
常用方法一般有:. file_get_contents file_put_contents readfile($file) //效率很高. 一般代码: /** * 抓取远程图片 * * @param ...
- python--批量下载豆瓣图片之升级版本
周末下雨没法出门,刷刷豆瓣看看妹子,本想拿以前脚本下载点图片,结果发现运行失败,之前版本为<python--批量下载豆瓣图片>,报错HTTP Error 403: Forbidden,网上 ...
- 批量下载网站图片的Python实用小工具(下)
引子 在 批量下载网站图片的Python实用小工具 一文中,讲解了开发一个Python小工具来实现网站图片的并发批量拉取.不过那个工具仅限于特定网站的特定规则,本文将基于其代码实现,开发一个更加通用的 ...
随机推荐
- 实测iOS Dynamic Framework 对 App 启动时间的影响效果
最近看到的Slow App Startup Times里提到: The dynamic loader finds and reads the dependent dynamic libraries ( ...
- Win7 U盘安装Ubuntu16.04 双系统详细教程(方法一)
主要分为以下几步: 一. 下载Ubuntu 16.04镜像软件: 二. 制作U盘启动盘使用ultraISO: 三. 安装Ubuntu系统: 四. 用EasyBCD 创建启动系统启动引导: (根据个人情 ...
- TextSharp详情
TextSharp是一个生成Pdf文件的开源项目,最近在项目中有使用到这个项目,对使用中的经验作一个小结. ITextSharp中相关的概念: 一.Document 这个对象有三个构造函数: 隐藏行号 ...
- android studio中使用git版本管理
转载请标注来源:http://blog.csdn.net/lsyz0021/article/details/51842774 AndroidStudio中使用Git-初级篇(一)——从github上传 ...
- 【Linux】关于减号 - 的用途
管线命令在 bash 的连续处理程序中是相当重要的!另外,在 log file 的分析当中也是相当重要的一环, 所以请特别留意!另外,在管线命令当中,常常会使用到前一个命令的 stdout 作为这次的 ...
- 还没被玩坏的robobrowser(4)——从页面上抓取感兴趣的内容
背景 本节的知识实际上是属于Beautiful Soup的内容. robobrowser支持Beautiful Soup,一般来说通过下面3个方法获取页面上感兴趣的内容 find find_all s ...
- 你应该知道的JAVA面试题
你应该知道的JAVA面试题 经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问.答案会在后面的文章中逐渐发布出来. 基础题目 Java线程的状态 进程和线 ...
- 使用equals方法时,要注意
这是我在项目中犯的一个低级错误: 使用equals方法时,要注意这个方法是boolean java.lang.String.equals(Object anObject)传递的是Object,所以传任 ...
- android中碰撞屏幕边界反弹问题
其实碰撞问题只是涉及到一点小算法而已,但在实际应用,尤其游戏中有可能会遇到,下面给出一个小示例,代码如下: MainActivity: package com.lovo; import android ...
- [转]如何在 Git 里撤销(几乎)任何操作
任何版本控制系统的一个最有的用特性就是“撤销 (undo)”你的错误操作的能力.在 Git 里,“撤销” 蕴含了不少略有差别的功能. 当你进行一次新的提交的时候,Git 会保存你代码库在那个特定时间点 ...