目录
我们发现csdn的文章
首先为了印证我们的想法
我们用postman往csdn我们任意一篇文章发起post请求
发送请求
编辑获得响应结果
我们发现我们的阅读量上涨
PostRequestSender类
但是我们经过测试发现
定义一个字符串数组 把URL放进去
然后延迟启动
在线程池里面设置任务的延迟和每次执行的间隔
主方法代码
博客的阅览量也在增长
然而为了防止被网站监测出来
我们可以采取其他策略
比如说往请求体里面塞一个随机数
注意不要写的太复杂 防止电脑卡爆
个人号推广
博客主页
Web后端开发
Web前端开发
数据库开发
项目实战
算法与数据结构
计算机基础
回忆录
我们发现csdn的文章
只要你点进去
就会增长阅读量
结合我们学习的计算机网络相关知识
不难猜测是只要向网页发送post请求
就能获得一次阅读量的增长。
POST请求是HTTP协议中的一种方法,用于向服务器提交数据,通常用于创建或更新资源,或者执行一些操作,比如提交表单数据、上传文件等。在Web开发中,POST请求比GET请求更安全,因为它将数据包含在请求体中,而不是像GET请求一样在URL中可见。
首先为了印证我们的想法
我们用postman往csdn我们任意一篇文章发起post请求
打开postman
发送请求
获得响应结果
我们发现我们的阅读量上涨
证实了我们的想法
我们只要往文章发送请求就行
利用网络编程的知识
我们写个发起请求的类
PostRequestSender类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Random;
public class PostRequestSender {
private String url;
static long ans=0;
public PostRequestSender(String url) {
this.url = url;
}
public void sendPostRequest() throws IOException {
// 创建URL对象
URL obj = new URL(url);
// 打开连接
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// 设置请求方法为POST
con.setRequestMethod("POST");
// 设置请求头
con.setRequestProperty("User-Agent", "Java client");
con.setRequestProperty("Content-Type", "application/json");
// 可选:设置请求体
Random random=new Random();
int randomValue = random.nextInt(1000); // 生成一个0到999的随机整数
String postData = "{\"key1\":\"value1\", \"key2\":\"" + randomValue + "\"}";
con.setDoOutput(true);
try (OutputStream os = con.getOutputStream()) {
byte[] input = postData.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
// 获取响应
int responseCode = con.getResponseCode();
System.out.println("Sending POST request to URL: " + url);
System.out.println("Response Code: " + responseCode);
System.out.println("run "+(ans++)+" ...");
// 读取响应内容
try (BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8))) {
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
// System.out.println("Response Body: " + response.toString());
}
}
}
但是我们经过测试发现
在同一时间内连续发送多次post请求
只会记录一次阅读量
这说明
CSDN自带有反爬的程序
我们可以规定在1分钟内依次爬取100篇文章
定义一个字符串数组 把URL放进去
然后延迟启动
利用的是多线程的知识
创建线程池
在线程池里面设置任务的延迟和每次执行的间隔
我们遍历数组
主方法代码
import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) throws Exception {
String[] urls = {
"https://blog.csdn.net/qq_30500575/article/details/139987333?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139962431?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139962247?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139926411?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139920678?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139920678?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139904327?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139904250?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139841808?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139841808?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139842155?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139857617?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139857996?spm=1001.2014.3001.5501",
"https://blog.csdn.net/qq_30500575/article/details/139858097?spm=1001.2014.3001.5501"
// Add more URLs as needed
};
// 创建定时执行的线程池
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
// 循环访问多个网址,并每隔20秒执行一次
for (String url : urls) {
Runnable task = () -> {
try {
PostRequestSender sender = new PostRequestSender(url);
sender.sendPostRequest();
} catch (IOException e) {
e.printStackTrace();
}
};
// 初始延迟10秒,每隔50秒执行一次任务
executor.scheduleAtFixedRate(task, 10, 50, TimeUnit.SECONDS);
}
// 等待所有任务完成后关闭线程池
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
executor.shutdown();
}
}
启动 查看控制台信息
注意联网哦
依次爬取打印
博客的阅览量也在增长
同时还会打印状态码和URL地址
然而为了防止被网站监测出来
我们可以采取其他策略
比如说往请求体里面塞一个随机数
注意不要写的太复杂 防止电脑卡爆
个人号推广
博客主页
多多!-CSDN博客
Web后端开发
https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482
Web前端开发
https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482
数据库开发
https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482
项目实战
https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482
算法与数据结构
https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482
计算机基础
https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482
回忆录
https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482