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

用到里阿帕奇的这两个类,在网上看到了一些资料结合自己的应用,这个贴出一个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. CSS.02 -- 样式表 及标签分类(块、行、行内块元素)、CSS三大特性、背景属性

    样式表书写位置  内嵌式写法 <head> <style type="text/css"> 样式表写法 </style> </head&g ...

  2. 测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇

    测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇   在前面我分享了几个新浪微博的自动化脚本的实现,下面我们继续实现新的需求,功能需求如下: 1,登陆微博 2,抓取评论页内容3,用正则表 ...

  3. 9.Linux系统引导流程

    一.Linux系统引导流程 当我们按下主机电源键的那时候开始,主板上的CMOS/BIOS模块将进行固件自检,以此检查各个硬件是否正确连接. 在Linux引导流程中,一般可以分为以下几个主要过程: 1. ...

  4. gcc编译参数之m32 m64

    m32指定编译为32位应用程序: make CFLAGS=-m32 m64指定编译为64位应用程序: make CFLAGS=-m64

  5. 在开源中国(oschina)上创建托管项目

    ***************************************************************** 目标: 1.能上传自己的项目到oschina上并且进行管理 2.能进 ...

  6. Jackson序列化实例

    参考文章 Jackson使用ContextualSerializer在序列化时获取字段注解的属性 使用BeanSerializerModifier定制jackson的自定义序列化(null值的处理) ...

  7. 实现简单的跨站脚本攻击(XSS)

    我们来通俗的了解一下什么是跨站脚本攻击(XSS):在表单中提交 一段 js代码 ,提交的内容被展示到页面时 ,js会被浏览器解析 打个比方吧,比如我现在写的这篇博客,写完以后我要发表对吧? 发表这个过 ...

  8. yii2.0套用模板问题

    载入视图 在控制器中: $this->render(); 会加载布局 $this->renderPartial(); 不会加载布局(也不能载入框架自带的jquery等) Yii2 选择布局 ...

  9. 初次接触 Android Studio FAQ

    1. 2. 3. 4. 6. 7. Tools -> Adnroid -> enable ADB integration   8.官方模拟器太慢,还是自己下个第三方模拟器吧. http:/ ...

  10. ueditor .net设置步骤

    1.官网http://ueditor.baidu.com,下载ueditor的.net版本 2.把下载后的文件夹放在项目content目录下 3.页面设置,Featrue为textArea的id 4. ...