我们假设在公司或家里使用网络爬虫去抓取自己索要的一些数据的时候,经常对方的站点有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. Python 第一章 基础知识

    如果熟其他计算机语言,可能会习惯于每行以分号结束.Python则不同,一行就是一行,不管多少. 如果喜欢的话,可以加上分号,但是不会有任何作用(除非同一行还有更多的代码),而且这也不是同行的做法. & ...

  2. poj 1979 Red and Black(dfs)

    题目链接:http://poj.org/problem?id=1979 思路分析:使用DFS解决,与迷宫问题相似:迷宫由于搜索方向只往左或右一个方向,往上或下一个方向,不会出现重复搜索: 在该问题中往 ...

  3. 文本图片自适应高度小bug以及解决办法

    自定义cell的文本图片自适应高度代码,如果存在自定义的cell赋值封装,就必须将自适应高度代码写在这个方法中 点击效果: 注:- (void)layoutSubviews 方法不能同时操作,否则会出 ...

  4. Android之TextView------LINK的点击事件

    package com.TextHtml; import android.app.Activity; import android.content.Context; import android.os ...

  5. BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )

    没什么好说的... --------------------------------------------------------------------- #include<cstdio&g ...

  6. 启用nginx status状态详解

    nginx和php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有帮助.为了后续的zabbix监控,我们需要先了解nginx状态页是怎么回事. 1. 启用nginx s ...

  7. Asp.Net Core

    开源Asp.Net Core小型社区系统 源码地址:Github 前言 盼星星盼月亮,Asp.Net Core终于发布啦!! Asp.Net发布时我还在上初中,没有赶上.但是Asp.Net Core我 ...

  8. Eclipse3.6 添加JUnit源代码

    Eclipse中无法查看JUnit源代码,也无法设置源代码的jar. 解决方法: 1.  下载org.junit.source_4.8.1.v4_8_1_v20100427-1100.jar,放到ec ...

  9. MSSQL奇技淫巧

    MSSQL:获得库每个表的记录数和容量 sp_msforeachtable是MS未公开的存储过程: exec sp_msforeachtable @command1="print '?'&q ...

  10. Excel VBA ——批量工作表重命名

    虽然平常在用excel 2010重命名工作表的时候,一般可能会用"双击工作表"的方法来重名,但是遇到大批量重名的时候就很麻烦. 我的方法,先建一张新表,然后在第一列写好要命名的表名 ...