我们假设在公司或家里使用网络爬虫去抓取自己索要的一些数据的时候,经常对方的站点有defence机制,会给你的http请求返回500错误,仅仅要是同样IP就请求不到数据,这时候我们仅仅能去重新启动路由器,这样IP地址会改变,网络爬虫就能正常工作了

以下是通过发送Socket请求来模拟路由器的重新启动指令:

protected void rebotadsl() {
try {
BufferedOutputStream sender = null;
String url = baseURL;
URL target = new URL(url);
InetAddress address = InetAddress.getByName(target.getHost());
Socket client = new Socket(address, 8080);
sender = new BufferedOutputStream(client.getOutputStream());
String str = "";
String cmd = "GET "
+ "/userRpm/StatusRpm.htm?Disconnect=%B6%CF%20%CF%DF&wan=1"
+ " HTTP/1.0\r\n" + "User-Agent: myselfHttp/1.0\r\n"
+ "Accept: www/source; text/html; image/gif; */*\r\n"
+ "Authorization: Basic" + " " + luyou + "\r\n"
+ "\r\n"; //luyou填写路由器的password,如YWRtaW46d2FuZzIwMDU=
sender.write(cmd.getBytes(), 0, cmd.length());
sender.flush();
System.out.println("因为重定向路由器断线了"); } catch (Exception ex) {
ex.printStackTrace(); } }

当然了,我们得写一个算法来使用这个函数,如两次重新启动路由器时间不能太短

java下载图片:

/**
*发送图片信息到server下载图片,应用ISO8859-1
*/
public void sendPic(String url,String story,String name){
setURL(url);
HttpClient http = new HttpClient();
http.getHttpConnectionManager().getParams().setConnectionTimeout(100000);
GetMethod get=null;
try{
get = new GetMethod(url);
}catch(IllegalArgumentException ex){
Log.logException("url带有不规则字符", ex);
setStatus(baseURL, ERROR);
_body.setLength(0);
return;
}
get.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,100000);
get.setFollowRedirects(false);
int er = 0;
try{
get.addRequestHeader("user-agent",useragent);
er = http.executeMethod(get);
System.out.println("server return code"+er);
}catch(Exception ex){
System.out.println("发送图片url到server訪问失败");
try{
Thread.sleep(120000);
}catch(InterruptedException e){
}
try {
er = http.executeMethod(get);
} catch (Exception e) {
System.out.println("连不上server,系统将推出");
System.exit(0);
}
} if (er == 200) {
InputStream is = null;
//读取从server传过来的页面数据
try {
is = get.getResponseBodyAsStream();
} catch (Exception e) {
System.out.println("读取server内容响应时错误发生");
}
byte buffer[] = new byte[20480];
byte tbuf[] = new byte[204800];
StringBuffer bf = new StringBuffer();
try {
int tl=0;
while (true) {
int l = is.read(buffer);
if (l < 0 || l+tl>204800)
break;
for(int jj=0;jj<l;jj++)
tbuf[tl+jj]=buffer[jj];
tl+=l;
}
bf.append(new String(tbuf, 0, tl, "ISO8859-1"));
_body.setLength(0);
_body.append(bf.toString());
}catch(IOException ex){
System.out.println("将server的数据转换成String时错误发生");
} }//end if(er == 200)
//下载图片到硬盘上 File outputfile = new File(story,name);
try{
FileOutputStream fos = new FileOutputStream(outputfile);
fos.write(_body.toString().getBytes("ISO8859-1"));
fos.close();
}catch(IOException ex){
System.out.println("IO存本地错误发生");
}
} // 返回true表示该url在数据库中已存在
public boolean URLisExist(String url) {
ResultSet rs = null;
boolean b = true;
int count = 0;
try {
_prepGetCount.setString(1, url);
rs = _prepGetCount.executeQuery();
rs.next();
count = rs.getInt("qty");
} catch (Exception ex) {
System.out.println("URLisExist错误发生");
try {
if (rs != null) {
rs.close();
}
} catch (Exception e1) {
System.out.println("rs关闭时错误发生");
}
}
if (count < 1)
b = false;
return b;
}

java假设模拟请求重新启动路由器(网络爬虫经常使用),还有java怎样下载图片的更多相关文章

  1. JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

    1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...

  2. 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战

    <精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...

  3. 从零开始学Python网络爬虫PDF高清完整版免费下载|百度网盘

    百度网盘:从零开始学Python网络爬虫PDF高清完整版免费下载 提取码:wy36 目录 前言第1章 Python零基础语法入门 11.1 Python与PyCharm安装 11.1.1 Python ...

  4. 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需 ...

  5. 从0开始学爬虫11之使用requests库下载图片

    从0开始学爬虫11之使用requests库下载图片 # coding=utf-8 import requests def download_imgage(): ''' demo: 下载图片 ''' h ...

  6. 网络爬虫讲解(附java实现的实例)

    本文转载http://blog.csdn.net/luojinping/article/details/6870898 转载过来主要是防止想百度文库一样突然停止运作,导致很多文库丢失而无法找寻 网络蜘 ...

  7. Java HttpURLConnection模拟请求Rest接口解决中文乱码问题

    转自:http://blog.csdn.net/hwj3747/article/details/53635539 在Java使用HttpURLConnection请求rest接口的时候出现了POST请 ...

  8. Python网络爬虫笔记(五):下载、分析京东P20销售数据

    (一)  分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1.      翻页的时候,谷歌F12的Network页签可以看到下面 ...

  9. java假设去请求一个网页的数据

    我们能够通过在java程序中模拟浏览器一样,把数据抓下来,详细方法是在java程序中set header和cookie,以下是一个样例: public class NetConnection { pu ...

随机推荐

  1. switf资源

    http://www.swiftv.cn/ http://letsswift.com/

  2. 案例分析:java中substring引发的Full gc

    问题定位 由于应用频繁地Full gc,就dump了内存下来用MAT分析,发现有个map占用了98%的内存,于是找到这个map private ConcurrentMap<String, Str ...

  3. c++中的 堆和栈

    /*用指针p存储堆中的空间时,在将第二块内存空间赋给p之前,我们要释放p原来指向的内存空间, 这样才不会造成内存泄漏,不然的话p原来记录的内存空间就找不到了,而且也无法再次利用 注意:你在使用new以 ...

  4. line

    小君童靴说头儿给了他一个project,实现给出屏幕上任意两个点,求出这两个点之间直线上的所有的点.觉得这个很好玩,就自己也写了一点code /* date : 2014/10/21 version ...

  5. 1, sync_with_stdio(), tie()的应用

    一.sync_with_stdio() 这个函数是一个“是否兼容stdio”的开关,C++为了兼容C,保证程序在使用了std::printf和std::cout的时候不发生混乱,将输出流绑在了一起. ...

  6. Python函数式编程:内置函数reduce 使用说明

    一.概述 reduce操作是函数式编程中的重要技术之一,其作用是通过对一个集合的操作,可以从中生成一个值.比如最常见的求和,求最大值.最小值等都是reduce操作的典型例子.python通过内置red ...

  7. Python 数据处理扩展包: pandas 模块的DataFrame介绍(创建和基本操作)

    DataFrame是Pandas中的一个表结构的数据结构,包括三部分信息,表头(列的名称),表的内容(二维矩阵),索引(每行一个唯一的标记). 一.DataFrame的创建 有多种方式可以创建Data ...

  8. 基于visual Studio2013解决算法导论之019栈实现(基于数组)

     题目 用数组实现栈 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #in ...

  9. 九度OnlineJudge之1023:EXCEL排序

    题目描述:     Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能.     对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始).随后在 N ...

  10. Android灭亡论之Firefox OS操作系统出现

    今天是2014年7月1日,过几天就要到深圳实训去了,实训核心内容是Android开发.尽管Android现在很火,但作为程序猿的我们必须时刻保持清醒的头脑.我虽不是什么预言家,但近期接触的Androi ...