最近公司在做一个爬虫工具,爬取公司现网的数据,留给方通项目使用

用到里阿帕奇的这两个类,在网上看到了一些资料结合自己的应用,这个贴出一个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使用的更多相关文章

  1. 使用httpclient发送http请求

    先来个httpclient的maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> &l ...

  2. HttpClient教程

    2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间.Http连接需要的三次握手开销很大,这一开销对于比较小的http消息来说更大.但是如果我们直接使用已 ...

  3. httpClient多线程请求

    使用httpClient可模拟请求Url获取资源,使用单线程的请求速度上会有一定的限制,参考了Apache给出的例子,自己做了测试实现多线程并发请求,以下代码需要HttpClient 4.2的包,可以 ...

  4. HttpClient 4.3教程(转载)

    HttpClient 4.3教程(转载) 转自:http://www.yeetrack.com/?p=779 前言 Http协议应该是互联网中最重要的协议.持续增长的web服务.可联网的家用电器等都在 ...

  5. httpclient总结

    1.httpclient总结:一.基本知识准备(1)构建URI工具类,URIBuilder(2)HttpResponse类,可以添加Header信息 获取所有Header信息的方法,调用HeaderI ...

  6. HttpClient 教程 (二)

    第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制.而连接操作的很多方面可以使用一些参数来控制. 2.1 连接参数 这些参数可以影响连接操作: 'ht ...

  7. httpclient 学习

    Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基 ...

  8. HttpClient 专题

    HttpClient is a HTTP/1.1 compliant HTTP agent implementation based on HttpCore. It also provides reu ...

  9. 接口自动化:HttpClient + TestNG + Java(三) - 初步封装和testng断言

    在上一篇中,我们写了第一个get请求的测试类,这一篇我们来对他进行初步优化和封装 3.1 分离请求发送类 首先想到的问题是,以后我们的接口自动化测试框架会大量用到发送http请求的功能. 那么这一部分 ...

  10. 接口自动化:HttpClient + TestNG + Java(二) - 第一个接口测试:get请求

    在上一篇中,我们搭建好了HttpClient + TestNG + Java的自动化接口测试环境,这一篇我们就赶紧开始编写我们的第一个接口测试用例. 本篇会对问题解决的思路进行更详尽的阐述. 2.1 ...

随机推荐

  1. parentNode和parentElement区别

    parentNode跟parentElement除了前者是w3c标准,后者只ie支持 当父节点的nodeType不是1,即不是element节点的话,它的parentElement就会是null 一般 ...

  2. JS页面打开方式丶对话框及页面跳转方式

    一.js页面的三种打开方式 1. window.open 2. window.navigate("url") 跳转到目标页面 3. window.location.href=&qu ...

  3. Webpack 速成

    前言 如果你已经对Webpack精通了或者至少一直在工作中使用它,请关闭当前浏览器标签,无视这篇文章. 这篇文章本意是写给我自己看的,作为一篇Cookbook供快速查询和上手用.原因是虽然工作中会涉及 ...

  4. 日期格式化,moment.js

    官方文档:http://momentjs.com/; 使用方法:moment(data).format("YYYY-MM-DD");//data为日期的字符串形式 moment() ...

  5. 机器学习:Python实现lms中的学习率的退火算法

    ''' 算法:lms学习率的退火算法 解决的问题:学习率不变化,收敛速度较慢的情况 思路:由初始解和控制参数初值开始,对当前解重复进行"产生新解-->计算目标函数差--> 接受或 ...

  6. GCM(Google Cloud Messaging)推送完全解析

    应该是目前为止全网最详细的GCM推送解析. GCM官方解释: https://developers.google.cn/cloud-messaging/?hl=zh-cn Send data from ...

  7. C++中进制转换问题

    一直在刷题的时候,都会遇到一个坑,就是进制转换的问题.而每一次都傻乎乎的自己去实现一个.所以算是对以前的坑的一个总结. itoa 函数 itoa是广泛应用的非标准C语言和C++语言扩展函数.由于它不是 ...

  8. 手机自动化测试:appium源码分析之bootstrap十四

    手机自动化测试:appium源码分析之bootstrap十四   poptest(www.poptest.cn)是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开 ...

  9. JavaWeb总结(三)—JSP

    一.JSP简介 1.基本认识 (1)JSP页面是由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件,JSP 页面的文件扩展名必须为.jsp. (2)在JSP页面中编写的Java代码需要嵌套 ...

  10. [转载]转载一篇好文章作为Java与面向对象之随感(3)

    关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没法很 ...