有人說程序員不懂浪漫,還有一些梗說即便是女神/男神,換行不一樣也不相爲謀。 更別說,有的 女生/男生 有本身喜歡的 小哥哥/小姐姐,黑咱們做爲程序員不懂他們的追星樂趣。javascript
OK,咱們可能不懂追星的那份樂趣,可是若是可以讓大家開心。那咱們也願意。java
接下來,就實戰演示一下,如何討好你的追星另外一半。node
(雖然我只在安卓手機上測試過,iphone應該同理)程序員
打開Charles,用手機鏈接它。chrome
這個時候就能夠看到這樣的畫面了 json
能夠看到左邊請求的地址來自於https,進行了加密,咱們的請求API也變成了unknown。若是咱們想要獲取SSL的內容,須要給手機安裝證書,獲取權限。小程序
在菜單選擇Help => SSL Proxying => Install Charles Root….,根據本身的設備進行選擇。若是是手機,就選擇第四項。如圖。 數組
而後會彈出這個畫面 瀏覽器
在手機上用chrome瀏覽器(系統默認瀏覽器可能致使識別證書,就沒法安裝)訪問 chls.pro/ssl 便可下載證書,按照提示安裝以後。就會發現,以前unknown的API變的可見啦! 服務器
以後你在手機上的每一步操做,都會在這裏獲得提示。
獲得了咱們想要的數據以後,咱們該怎麼作呢? 就拿我使用的這款小程序來講,它的設限是每隔兩分鐘能夠偷一次花,一次能夠偷5我的。 可是我天天都要上班,時時刻刻的掏手機給偶像進行投票?可能不太好吧?
這個時候,咱們須要的是在手機上先進行一次投票操做,就能夠在charles的左邊菜單欄獲取到對應的請求。 這個時候,咱們須要對想要模擬的請求點擊右鍵,選擇repeat。就能夠進行重複投票了。
點擊右邊contents能夠看到兩個參數,一個叫 openid,是你本身在這個小程序的惟一編碼,至關於你在這個小程序的身份證。另外一個是mid,是偷取的明星的編號。
你偷取5個明星,記錄5次API,每隔2分鐘,請求這幾個API,就能保證本身不會錯過任何一朵花。
答案固然是否認的啦! 這個時候須要另外一個工具,叫作Postman。是一個能夠模擬HTTP請求的一個工具。 你在裏面只要輸入,請求的API地址,再填入一大堆配置參數,以及header等等,就能夠發送成功了。
有沒有簡單的方法呢? 有! 在Charles裏面對請求點右鍵,選擇Copy cURL Request
而後在Postman裏面,點擊最上欄的Import。
選擇Paste Raw Text 將剛剛複製的地址,粘貼進去。而後在右側窗口就會生成一個模擬好的請求,點擊Send!
偷取成功!這個時候,你在想,我爲何必定要隔2分鐘點一次? 我就不能讓程序自動化起來嗎?
在這裏用nodejs作例子。 執行cURL命令去調用API。
var exec = require('child_process').exec;
var sys = require('sys');
const hasFlowers = [];
//經過上面教的方法,將想要偷取的明星mid放入數組。
const idolsIds = [];
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
async function createCurlRequestLink() {
const startTime = new Date();
//填入你的OpenId
const openid = 'XXXX';
await asyncForEach(idolsIds, async (number) => {
// for(let number = 1150; number<=3000; number++){
const a = `curl XXXXXXX '{\"openid\":\"${openid}\",\"mid\":${number}}' --compressed`;
await sleep(280);
exec(a, (error, stdout, stderr) => {
try {
console.log(stdout);
const json = JSON.parse(stdout);
if (json.status > 0) {
hasFlowers.push(number);
console.log(`鮮花總數: ${hasFlowers.length * 8}`);
}
} catch (err) {
console.log(err);
}
});
});
const endTime = new Date();
console.log(`花費時間: ${(endTime - startTime) / 1000}`);
}
createCurlRequestLink();
// 每2分鐘去偷取一次
setInterval(createCurlRequestLink, 120000);
複製代碼
而後用 node 文件名 就能夠運行它了。
把它丟在服務器上,用screen放在background進程裏跑起來。
不知不覺中,幾十萬的花已經到手啦!
不管是小程序仍是APP,都是在你的手機上。它須要和遠程的服務器進行數據交互,也就是API請求。 本質上,咱們只是進行了一次模擬請求,至關於你手機進行了點擊。 而講到剛剛的部分,咱們也依舊是在合理的操做範圍許可內。並無任何的做弊行爲,只不過讓偷花的行爲變得自動化了起來。可以在凌晨也讓電腦替咱們偷花。
至於開發者能不能防禦呢? 這個答案是確定的。 好比,對每個openid進行來源監測,訪問設備的監控,請求的時候攜帶額外參數判斷來源。 若是短時間內Openid進行了多個設備的更換,標記爲可疑,等等。
可是是否值得,就是另外一個討論的範疇了。
看到了這裏,你能夠爲所欲爲的給你的女神/男神去刷票啦! 既沒有浪費時間去一直等待投票的時間,又獲得了內心的知足。 若是你看完了這篇文章,那恭喜你,還學到了新知識。
/爲了免去沒必要要的麻煩,我隱去了我使用的投票軟件。/