HttpClient--HttpGet使用
最近公司在做一个爬虫工具,爬取公司现网的数据,留给方通项目使用
用到里阿帕奇的这两个类,在网上看到了一些资料结合自己的应用,这个贴出一个demo
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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 java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* Created with .
* Date: 14-5-28
* Time: 下午12:17
* To change this template use File | Settings | File Templates.
*/
public class LoadImageClient {
CloseableHttpClient httpclient = HttpClients.createDefault();
public HttpGet doGet(String url) {
HttpGet httpGet = new HttpGet(url);
httpGet.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
httpGet.addHeader("Connection", "Keep-Alive");
httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
httpGet.addHeader("Cookie", "");
return httpGet;
}
public void loadImage(int tid) {
CloseableHttpResponse response = null;
CloseableHttpResponse resImg = null;
try {
HttpGet httpGet = doGet("http://www.xxx.com/tt?tid=" + tid);
response = execute(httpGet);
if (response == null){
return;
}
String result = EntityUtils.toString(response.getEntity());
JSONObject json = new JSONObject();
JSONObject jsonObject = json.parseObject(result.toString().trim());
Object files = jsonObject.get("pictures");
if (files != null) {
JSONArray jsonArray = (JSONArray) files;
if (jsonArray.size() <= 0) return;
JSONObject o = (JSONObject) jsonArray.get(jsonArray.size() - 1);
String url = (String) o.get("url");
/* if(!url.contains("/sns/")){
return;
}*/
String fileName = url.substring(url.lastIndexOf("/") + 1);
System.out.println(Thread.currentThread().getName() + "--" + url);
File file = new File("e:\\pic\\" + fileName.trim());
/* if (!file.exists()) {
file.createNewFile();
}*/
FileOutputStream outputStream = new FileOutputStream(file);
HttpGet httpGetImg = doGet(url);
resImg = execute(httpGetImg);
if (resImg == null) return;
InputStream imgIs = resImg.getEntity().getContent();
BufferedInputStream bis = new BufferedInputStream(imgIs);
byte[] bytes = new byte[1024 * 1024];
int length = 0;
while ((length = bis.read(bytes)) > -1) {
outputStream.write(bytes, 0, length);
}
outputStream.flush();
outputStream.close();
}else{
System.out.println(Thread.currentThread().getName() + "--" + tid);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(response);
close(resImg);
}
}
private void close(CloseableHttpResponse response) {
try {
if (response != null) response.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private CloseableHttpResponse execute(HttpGet httpGet) {
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpGet);
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
return response;
}
response.close();
return null;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
final LoadImageClient loadImage = new LoadImageClient();
List<Thread> threads = new ArrayList<Thread>();
for (int i = 10; i < 100; i++) {
final int t = i * 10;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
int tid = 339000 + t;
for (int j = 10; j >=0 ; j--) {
loadImage.loadImage(tid + j);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
threads.add(thread);
}
for (Thread thread : threads) {
thread.start();
}
}
}
这里还有一种使用谷歌浏览器获取异步请求数据
HttpClient--HttpGet使用的更多相关文章
- 使用httpclient发送http请求
先来个httpclient的maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> &l ...
- HttpClient教程
2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间.Http连接需要的三次握手开销很大,这一开销对于比较小的http消息来说更大.但是如果我们直接使用已 ...
- httpClient多线程请求
使用httpClient可模拟请求Url获取资源,使用单线程的请求速度上会有一定的限制,参考了Apache给出的例子,自己做了测试实现多线程并发请求,以下代码需要HttpClient 4.2的包,可以 ...
- HttpClient 4.3教程(转载)
HttpClient 4.3教程(转载) 转自:http://www.yeetrack.com/?p=779 前言 Http协议应该是互联网中最重要的协议.持续增长的web服务.可联网的家用电器等都在 ...
- httpclient总结
1.httpclient总结:一.基本知识准备(1)构建URI工具类,URIBuilder(2)HttpResponse类,可以添加Header信息 获取所有Header信息的方法,调用HeaderI ...
- HttpClient 教程 (二)
第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制.而连接操作的很多方面可以使用一些参数来控制. 2.1 连接参数 这些参数可以影响连接操作: 'ht ...
- httpclient 学习
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基 ...
- HttpClient 专题
HttpClient is a HTTP/1.1 compliant HTTP agent implementation based on HttpCore. It also provides reu ...
- 接口自动化:HttpClient + TestNG + Java(三) - 初步封装和testng断言
在上一篇中,我们写了第一个get请求的测试类,这一篇我们来对他进行初步优化和封装 3.1 分离请求发送类 首先想到的问题是,以后我们的接口自动化测试框架会大量用到发送http请求的功能. 那么这一部分 ...
- 接口自动化:HttpClient + TestNG + Java(二) - 第一个接口测试:get请求
在上一篇中,我们搭建好了HttpClient + TestNG + Java的自动化接口测试环境,这一篇我们就赶紧开始编写我们的第一个接口测试用例. 本篇会对问题解决的思路进行更详尽的阐述. 2.1 ...
随机推荐
- MIT 计算机科学及编程导论 Python 笔记 1
计算机科学及编程导论在 MIT 的课程编号是 6.00.1,是计算机科学及工程学院的经典课程.之前,课程一直使用 Scheme 作为教学语言,不过由于 Python 简单.易学等原因,近年来已经改用 ...
- linux服务器证书安装指引
下面提供了3类服务器证书安装方法的示例: 1. Apache 2.x 证书部署 1.1 获取证书 Apache文件夹内获得证书文件 1_root_bundle.crt,2_www.domain.com ...
- Windows 10 Creaters Update 画中画模式和窗口高斯模糊
在Windows 10 Creaters Update中,可以给窗口设置高斯模糊了,只要几行代码! <Grid Loaded="Grid_Loaded"> <Gr ...
- php中奖算法逻辑
最近公司有两个活动, 一个是砸蛋活动, 另一个是转盘活动. 后台这边需要做接口进行对接,当用户在前台点击进行抽奖的时候,发送AJAX请求给后台,后台进行业务处理包括记录用户中奖信息,然后返回json格 ...
- 机器学习:Python中如何使用支持向量机(SVM)算法
(简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...
- Windows 10 系统Microsoft Edge的使用手册
Windows 10 默认浏览器(Edge)使用手册 体验网络有了一种新的方法.只有在 Windows 10 上才能找到它. 下面详细介绍一下Edge浏览器的使用规范: 一.打开Windows10系统 ...
- 提交到SVN中的项目被删除 且项目名已经被新建项目占用找回方法
提到项目找回,一看就头疼,找回起来较麻烦.下面就讲一下. 首先,确定项目是否被删除?找项目,太多了,都被找一遍了,还是没找到,看看就头痛,换了个方法,找了个项目的包,xx.apk,反编译下吧,过程略, ...
- js根据条件json生成随机json:randomjson
前端开发中,在做前后端分离的时候,经常需要手写json数据,有3个问题特别揪心: 1,数据是写死的,不能按一定的条件随机生成长度不一,内容不一的数据 2,写数组的时候,如果有很多条,需要一条一条地写, ...
- jmeter读取文件进行参数化时随机取值实现
jmeter能用来做参数化的组件有几个,但是都没有随机取值的功能,遇到随机取值的需求怎么办呢? 突发奇想,可以用函数_StringFromFile来实现,先来介绍下此函数: 此函数位于函数助手中, 函 ...
- Java 中的 String 类常用方法
字符串广泛应用在Java编程中,在Java中字符串属于对象,String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等. Strin ...