Postman的一次经历

前言

因为我们学校图书馆是预约制,头天晚上18点能预约第二天的位置,我在考研的时候预约了一个位置,结果下学期来的时候发现一直有人卡点预约位置,我又不能说我做了一个学期就是我的位置,所以萌生了想要利用软件来进行预约的想法

走过的路

首先我想到的是用IDEA来写代码,写一个爬虫,发送网络请求然后返回数据即可,最后我发现我不太懂Maven,就一直再看这方面的东西,但关键是第二天马上就要预约,所以我没有办法继续去学习下来,其实这种办法是最好的,最自动化的。

后来我又想到写一个Android程序进行预约,直接用retrofit来进行预约就可以了,然后发现我的电脑重装了系统,就找不到Android studio,下载又很慢,如果用android虽然麻烦点,但好歹都是学过的,重新看看自己的代码就捡回来了。就本来打算写一个Button然后点一下发送Http请求,请求就直接完事,以后就直接拿手机预约图书馆就好,但发现很困难去再配置环境安装Android studio,所以我就放弃了。

cookie的了解

本身觉得自己了解这个网络请求机制的不够,所以我就想先去了解一下,用chorme开发者工具先看看网页发送的过程,然后用Postman模拟一下,模拟模拟这我就想到了,最简单不是就可以直接去用Postman去发送数据。

在观察的过程中,我首先是登录图书馆系统,在登陆前按出f12看开发者工具image-20220315182636488

然后我就看到了login的网络请求,点进去是它发送的很多东西,然后我就扒下了这个网址,也就是请求登录的网址。然后我进行预约,看到了reserve相关的请求,我就扒下来放在了postman里

image-20220315183416458

然后发现每次点send,就会写未登录?我就在想,肯定是我的token或者叫什么cookie没过来,所以它会说未登录。后来经我询问邓哥,我可以手动登录拿到cookie然后把cookie放到这个reserve申请的Headers里的cookie,就相当于带了个门票,拿着门票进门就肯定可以。然后我就一直找cookie在哪,首先是这里image-20220315183149731

但其实根本不行,问了好几次才发现是这个cookie是不完整的,没法去验证:我是我 。那我只能再去找

image-20220315183326149

我以为是上面这个,结果这个也是不完整的。所以我就再问了问邓哥,邓哥给我发了张截图,意思是这样的:我在登录的同时,也请求了很多页面或者其他的数据,但是请求这些数据是需要cookie的,所以发送的get请求中一定会有完整的cookie

我恍然大悟,我就在get中找到了真正的cookie

image-20220315183816576

我现在的任务就是确定预约参数了!只要确定了预约参数,再加上cookie就可以了!

我发现其他的参数都很好理解:时间 响应时间等等,唯独这个

image-20220315183933007

所以我猜测是桌号,只要知道了桌号就能进行预约。

所以我通过预约了一个没人的桌子拿到了桌号的规律:

image-20220315184122981

括号里就是现实的桌号,而136几则是参数

所以这样就大功告成了!

——————————————分割线——————————————————————

突然发现,居然有人在一两秒内进行预约,我本来觉得这样手动够快的了,但还是被抢了位置,所以我觉得利用程序制裁他!

后续

为了先了解清楚,我想到两种办法,一是先Post拿到cookie,在Get请求发送,二是还是手动拿到cookie,然后自动发送,误差大概在ms量级。

该说不说,整!首先在网上搜索利用Java发送请求的框架或者maven库,找到了这个还可以的HttpURLConnection,它可以set数据报,然后发送出去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
import java.util.Timer;
import java.util.concurrent.TimeUnit;

public class test {
public static void main(String[] args) {
while (true) {
clienttest();
}
}

public static void clienttest() {
try {
/**
* 检查 时间 桌号!
*/
String path = "http://kjyy.ccnu.edu.cn/ClientWeb/pro/ajax/reserve.aspx?dialogid=&dev_id=100671332&lab_id=&kind_id=&room_id=&type=dev&prop=&test_id=&term=&Vnumber=&classkind=&test_name=&start=2022-04-2+8:30&end=2022-04-2+22:00&start_time=2100&end_time=2200&up_file=&memo=&act=set_resv&_=1647334311451";
URL url = new URL(path);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
/*con.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
con.setRequestProperty("Content-Length",
String.valueOf(path.length()));*/
con.setRequestProperty(
"User-Agent",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36");
/**
* 在这里仔细检查一下cookie,填入cookie
*/
//TimeUnit.SECONDS.sleep(3);
con.setRequestProperty("Cookie", "ASP.NET_SessionId=bcfblsndu2nfxejbvnoufmfv; _d_id=47fa0a225bba4d0b390f21eb168c49");
while (true) {
con.connect();
Scanner scanner = new Scanner(con.getInputStream(), "UTF-8");
String text = scanner.useDelimiter("\\A").next();
System.out.println(text);
scanner.close();
// System.out.println(con.getInputStream());
// BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
// String line;
// StringBuilder sb = new StringBuilder();
// while ((line = br.readLine()) != null) {// 循环读取流
// sb.append(line);
// }
//
// System.out.println(sb);
}
//if (con.getResponseCode() == 200) {

// BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
// String line;
// StringBuilder sb = new StringBuilder();
// while ((line = br.readLine()) != null) {// 循环读取流
// sb.append(line);
// }
// br.close();// 关闭流
// System.out.println(sb);
// // } else {
// // System.out.println(con.getResponseCode());
// // }
// con.disconnect();// 断开连接
} catch (Exception e) {

System.out.println(e);
}

}
}

大功告成!实现自由预约~