通过编程自动化增加CSDN博客的访问量

前段时间经过观察,我发现,和大多数的博客一样,CSDN在每篇博客文章的上方,都有一个阅读量。这个阅读量的增加,是通过Web用户在浏览器端输入这篇文章的url地址,然后发送请求到服务器端,这时,阅读量就会加1,跟访问者是否登录没有关系。但是需要注意的是,前后的两次请求不能是同一个Session,也就是说,需要重新启动一个浏览器窗口。还有就是,前后两次请求不能间隔时间太短,否则无法刷访问量。


我们可以写一个控制台程序,然后每隔几秒钟就启动一个线程,这个线程的作用,就是启动浏览器访问指定页面,然后Sleep一段时间后,关闭浏览器。一段时间后,在开启浏览器,如此重复,直到刷出指定的次数。

[csharp]  view plain  copy
  1. static void Main(string[] args)  
  2.         {  
  3.   
  4.             for (int i = 0; i < 1000; i++)  
  5.             {  
  6.                 Util util = new Util();  
  7.                 util.StartThread();  
  8.                 Thread.Sleep(90000);  
  9.                 util.Close();  
  10.             }  
  11.         }  
  12.   
  13.   
  14.     public class Util  
  15.         {  
  16.             public void StartThread()  
  17.             {  
  18.                     ThreadStart start = new ThreadStart(StartIE);  
  19.                     Thread thread = new Thread(start);  
  20.                     thread.Start();  
  21.               
  22.             }  
  23.   
  24.     private void StartIE()  
  25.         {  
  26.             Process.Start("http://blog.csdn.net/sundacheng1989/article/details/7645498");  
  27.         }  
  28.   
  29.         public void Close()  
  30.         {  
  31.             System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcesses();  
  32.   
  33.             foreach (System.Diagnostics.Process myProcess in myProcesses)  
  34.             {  
  35.                 if (myProcess.ProcessName.ToUpper() == "IEXPLORE")  
  36.                 {  
  37.                     myProcess.Kill();  
  38.                 }  
  39.             }  
  40.         }  
  41.     }  



2015年11月更新:


上边的那些代码是刚刚接触C#的时候写的,对于很多地方还不是很明白,所以很乱。最近有时间了,又重写了一下这方面的东西。其实原理很简单,就是CSDN对于某篇文章的访问量的计数原则很简单,就是有人访问了这个页面,页面的访问量就加1.


基于此,使用ASP.NET Web API的HttpClient重写了这个工具。涉及到了一些多线程以及异步同步的基础。相关代码如下

[csharp]  view plain  copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.IO;  
  4. using System.Net.Http;  
  5. using System.Net.Http.Headers;  
  6. using System.Text;  
  7. using System.Threading;  
  8. using System.Threading.Tasks;  
  9.   
  10. namespace VisitAmountIncreaser  
  11. {  
  12.     class Program  
  13.     {  
  14.         static void Main()  
  15.         {  
  16.             Console.WriteLine("The application is staring!");  
  17.             //string url = Console.ReadLine();  
  18.             string url = "http://blog.csdn.net";  
  19.             int threadAcount = 2;  
  20.             StartTask(url);  
  21.             string command = Console.ReadLine();  
  22.             if (string.CompareOrdinal(command, "X") == 0)  
  23.             {  
  24.                 Console.WriteLine("Application will quit after 30 seconds!");  
  25.                 Thread.Sleep(30000);  
  26.             }  
  27.         }  
  28.   
  29.         static async void StartTask(string url)  
  30.         {  
  31.             while (true)  
  32.             {  
  33.                 await RunVisit(url);  
  34.             }  
  35.         }  
  36.   
  37.         static async Task RunVisit(string url)  
  38.         {  
  39.             using (var client = new HttpClient())  
  40.             {  
  41.                 client.BaseAddress = new Uri(url);  
  42.                 client.DefaultRequestHeaders.Accept.Clear();  
  43.                 client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));  
  44.   
  45.                 try  
  46.                 {  
  47.                     HttpResponseMessage response = await client.GetAsync("sundacheng1989/article/details/7945542");  
  48.                     response.EnsureSuccessStatusCode();    // Throw if not a success code.  
  49.   
  50.                     string content = await response.Content.ReadAsStringAsync();  
  51.   
  52.                     string result = GetStringInBetween(content, "<span class=\"link_view\" title=\"阅读次数\">""</span>");  
  53.                     Console.WriteLine(result);  
  54.                 }  
  55.                 catch (HttpRequestException e)  
  56.                 {  
  57.                     Console.WriteLine(e.Message);  
  58.                 }  
  59.             }  
  60.         }  
  61.   
  62.         public static string GetStringInBetween(string strSource, string strStart, string strEnd)  
  63.         {  
  64.             if (strSource.Contains(strStart) && strSource.Contains(strEnd))  
  65.             {  
  66.                 int Start = strSource.IndexOf(strStart, 0, System.StringComparison.Ordinal) + strStart.Length;  
  67.                 int End = strSource.IndexOf(strEnd, Start, System.StringComparison.Ordinal);  
  68.                 return strSource.Substring(Start, End - Start);  
  69.             }  
  70.             else  
  71.             {  
  72.                 return "";  
  73.             }  
  74.         }  
  75.     }  
  76. }  

其实,当运行这个console程序时候,我们可以把这个exe复制多个,然后同时运行,那么就是多个进程同时干这件事了。在本机测试后,这段代码运行没有问题。

代码已经打包,下载地址:http://files.cnblogs.com/files/Robin-Sun/VisitAmountIncreaser.zip



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值