需求:无聊,就是玩玩。

功能:指定博客地址,随机访问某一篇博文,增加该博文访问量。

实现:1、通过Httpclient实现模拟访问操作。

2、指定博客列表URL,通过HTMLParse爬虫框架分析HTML节点,获取所有博文URL,随机模拟操作。

3、使用线程Thread Sleep设置定时访问博文URL。

4、使用Java Service Wrapper打包成Windows服务,每天自动启动并自动运行程序(可选)。

准备工作:

需要准备以下LIB:可根据情况删剪LIB。

详细代码:

package org.csdn.service;import java.io.IOException;
import java.util.Random;import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.Span;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;public class RefreshCSDN extends Thread{private CookieStore cookieStore = new BasicCookieStore();private String blogURL = "";// 所有博客URL数组。private static String [] links = null;// 博客访问次数。private int c = 1;public RefreshCSDN(String blogURL) throws Exception {this.blogURL = blogURL;this.getCSDNBlogList();}public void run(){while(true){try {// 从博客列表中随机取出一篇博文。String url = links[new Random().nextInt(links.length-1)];System.out.println(url);this.refreshCSDN(url);// 30秒刷一次。Thread.sleep(30*1000);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("出错,暂停10分钟再继续。");try {Thread.sleep(2*60*60*1000);} catch (InterruptedException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}continue;}}}// 模拟请求。@SuppressWarnings("deprecation")private HttpResponse execute(String url)throws ClientProtocolException, IOException {// 必须要设置头的HOST,否则CSDN返回权限403 ForhiddenBasicHttpParams headerParams = new BasicHttpParams();headerParams.setParameter(ClientPNames.HANDLE_REDIRECTS, Boolean.TRUE);headerParams.setParameter("Host", "blog.csdn.net");HttpClient httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager());HttpGet httpGet = new HttpGet(url);httpGet.setParams(headerParams);httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0");HttpContext localContext = new BasicHttpContext();localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);HttpResponse response = httpClient.execute(httpGet, localContext);System.out.println("Request URL:"+url);// 返回状态。System.out.println("[Status:" + response.getStatusLine().getStatusCode() + "]");return response;}public void refreshCSDN(String url) throws Exception {HttpResponse response = execute(url);int statusCode = response.getStatusLine().getStatusCode();if(statusCode == 200){System.out.println("成功Refresh:" + (c++) +"次.");}System.out.println(""+statusCode);}// 获取博文所有URLprivate void getCSDNBlogList() throws Exception {HttpResponse response = execute(blogURL);String content = EntityUtils.toString(response.getEntity());NodeList nodeList = this.getNodeByClass(content, "span", "link_title");links = new String[nodeList.size()];for(int i =0; i < nodeList.size();i++){Span span = (Span)nodeList.elementAt(i);LinkTag link = (LinkTag)span.getChildren().elementAt(0);links[i] = "http://blog.csdn.net"+link.getAttribute("href");}}// 遍历HTML节点。private NodeList getNodeByClass(String content, String tag, String className) {Parser parser = Parser.createParser(content, "utf-8");AndFilter filter = new AndFilter(new TagNameFilter(tag),new HasAttributeFilter("class", className));try {return parser.parse(filter);} catch (ParserException e) {e.printStackTrace();return null;}}public static void main(String[] args) throws Exception {// 设置博客目录列表URL。RefreshCSDN csdn = new RefreshCSDN("http://blog.csdn.net/programmer_sir?viewmode=contents");csdn.start();csdn.start(); // 可以开多个线程,开多了小心CSDN搞你。

}}

以上代码,Main方法直接运行即可。

打印结果:

Request URL:http://blog.csdn.net/programmer_sir?viewmode=contents
[Status:200]
http://blog.csdn.net/programmer_sir/article/details/9009729
Request URL:http://blog.csdn.net/programmer_sir/article/details/9009729
[Status:200]
成功Refresh:1次.
200
http://blog.csdn.net/programmer_sir/article/details/9049005
Request URL:http://blog.csdn.net/programmer_sir/article/details/9049005
[Status:200]
成功Refresh:2次.
200
http://blog.csdn.net/programmer_sir/article/details/10285231
Request URL:http://blog.csdn.net/programmer_sir/article/details/10285231
[Status:200]
成功Refresh:3次.
200
http://blog.csdn.net/programmer_sir/article/details/25710825
Request URL:http://blog.csdn.net/programmer_sir/article/details/25710825
[Status:200]
成功Refresh:4次.
200
http://blog.csdn.net/programmer_sir/article/details/18351107
Request URL:http://blog.csdn.net/programmer_sir/article/details/18351107
[Status:200]
成功Refresh:5次.
200
http://blog.csdn.net/programmer_sir/article/details/23603881
Request URL:http://blog.csdn.net/programmer_sir/article/details/23603881
[Status:200]
成功Refresh:6次.
200

注意事项:

1、建议是30秒~一分钟刷一次,如果间隔时间太短,CSDN是不会增加访问量的。

2、http://blog.csdn.net/programmer_sir?viewmode=contents是我的博客列表页面,指定你的博客列表URL即可。

3、代码更新于2014年9月份10号。后续如果CSDN对IP访问限制住了,那你可以使用JAVA代理,这样的话CSDN是无法限制刷流量的,关于如何使用JAVA代理,可以参考我很早前的一篇博文。

4、如果你只写了一篇博客,CSDN的LIST标签不是SPAN好像,你要改以下方法。

getNodeByClass

5、那些只看不评论的程序员,注定是很难提升的。哈哈。。

模拟CSDN请求,做一点事相关推荐

  1. 前端请求接口post_前端如何优雅地模拟接口请求?(给你的代码加点小意外)

    前言: 作为一名前端开发程序猿,每天都被产品经理催着开发,项目一启动,产品就过来了.嘘寒问暖:大胸弟,你啥时开始做啊?一般我们都会直接告诉TA,你先找接口解决数据问题. 而我们也会经常遇见" ...

  2. 忽悠马云10亿的骗子,还了阿里4500亿:做对事赢一场,跟对人赢一生!

    文/金错刀频道 张一弛 那个骗走马云10个亿,被阿里同事指着鼻子让他滚蛋的人,后来怎么样了? 后来,他成为阿里巴巴集团首席技术官,而且被公认为,近10年来,中国最好的首席技术官. 他叫王坚,被称为&q ...

  3. 忽悠马云10亿,还阿里4500亿:做对事赢一场,跟对人赢一生!(文章为转载,网上各种假原创,未搜到原作者)

    那个忽悠马云10个亿,被阿里同事指着鼻子让他滚蛋的人,后来怎么样了? 后来,他成为阿里巴巴集团首席技术官,而且被公认为,近10年来,中国最好的首席技术官. 他叫王坚,被称为"阿里云之父&qu ...

  4. 数据分析与爬虫实战视频——学习笔记(一)(python基础、urllib、超时设置、自动模拟HTTP请求、异常处理、浏览器伪装、代理服务器、新闻爬虫、淘宝登陆和图片爬取)

    未经允许,请勿转载. 连载未完成状态 网址: [数据挖掘]2019年最新python3 数据分析与爬虫实战_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili ...

  5. Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析

    博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye 写博客 发Chat 传资源 登录注册 原 Java爬虫(二)-- httpClient ...

  6. 多做一点,就吃亏了吗?

    多做一点,就吃亏了吗? 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/7870927 作者:张建波 ...

  7. 简单实用的Chrom浏览器模拟POST请求方式

    实现post请求方式有很多种,比如postman等. 但有时候接口做了登录拦截,这个时候使用postman等工具要配置相关的cookie信息. 这个过程是很繁琐,最后也不一定能达到预期效果. 本篇使用 ...

  8. [转】HTTP请求流程(二)----Telnet模拟HTTP请求

    转自: http://www.cnblogs.com/stg609/archive/2008/07/06/1237000.html 上一部分"流程简介", 我们大致了解了下HTTP ...

  9. (0011) iOS 开发之模拟HTTP请求与响应,返回自己想要的报文。

    iOS 本地模拟 HTTP请求的返回数据,用来先行开发. 在新需求的确定之后,在开发的开始阶段,一般后台接口先开发,这时客户端是拿不到接口文档规定的报文数据的,那我们怎么模拟接口请求返回数据尼? 直接 ...

最新文章

  1. SAP S4HANA 使用BP创建供应商报错 - You cannot create a vendor with grouping G001 - 对策
  2. MySQL JOIN原理
  3. ueditor编辑器php上传配置,php版本UEditor编辑器图片上传设置
  4. 初探Thymeleaf模板引擎
  5. 设置div的高度_html中如何让div居中
  6. div盒子水平垂直居中的方法
  7. Composite UI Application Block(CAB)
  8. SQL:postgresql将查询结果拼接起来
  9. 前端实时可视化工具livereload安装和使用
  10. php 汉字转拼音 扩展,PHP中文转拼音扩展
  11. 【Android进阶】(1)使用开源框架AndroidAnnotation
  12. 实验项目一 俄罗斯方块游戏
  13. 模拟人生显示无法连接服务器,模拟人生总是显示无法连接网络
  14. 卡内基梅隆大学计算机专业类别,卡内基梅隆大学计算机专业优势介绍
  15. Hadoop之使用LZO压缩并支持分片
  16. Vue2基础篇-21-非单文件组件
  17. 人工蜂群算法的java代码_求人工蜂群算法的c程序源代码``````谢谢各位大神了``````...
  18. Android离线人脸识别方案对比
  19. Java加密技术(一)—— HMACSHA1 加密算法
  20. 邮箱日期IP地址信用卡验证(正则表达式)

热门文章

  1. LeetCode 91 Decode Ways(编码方式)(*)
  2. 鸿蒙符助战选哪个,梦幻西游手游大唐助战伙伴哪个好 大唐官府助战伙伴选择推荐...
  3. idea中actiBPM插件生成png文件 ,右键xml文件没有Diagrams
  4. 外企公司常用英文缩写
  5. 必看的电商报 “朋克养生”成主流,90后开始吃保健品了
  6. fatal: in unpopulated submodule 'xxxxx'
  7. linux原生系统_技德发布JStack 2.0,在Linux系统中无缝运行移动应用
  8. 易地推拓客分享如何让家长会成为续班杀手锏
  9. Any、AnyObject、as
  10. 现代企业6S规范管理有哪些?