最近由於有一些需求,須要對某些網站的數據進行抓取而後分析用戶的行爲之類的.因此對遇到的一些問題進行一個記錄,第一次處理這種加密的請求, 也花費了本身很多時間,作一個處理過程的記錄.給有相似需求的朋友也增長一個可參考的資料.java
1.首先是要看請求的url大體樣子是 chrome
這裏是一個get請求, uri的組成是:網站域名+api地址+analysis參數.最後翻譯爲java代碼大概是這樣後端
private static String generatorAnalysis() {
final String FLAG = "@#";
// @#/rank/indexPlus/brand_id/1@#52217050198@#1
// 時間戳的差值
Long time = System.currentTimeMillis() - 1515125653845L;
// 請求的api
String baseUrl = "/rank/indexPlus/brand_id/1";
StringBuilder builder = new StringBuilder(FLAG);
// 拼接字符串的規則 api + @# + 時間戳差值 + @#1
builder.append(baseUrl).append(FLAG).append(time).append(FLAG).append(1);
// 自定義的加密 這裏加密函數不就給出了 能夠本身根據斷點裏面的值推算出來哦
String encodeStr = diyEncode(builder.toString());
// 最後base64編碼下
return new String(Base64.getEncoder().encode(encodeStr.getBytes()));
}
複製代碼
1.先根據當前13位的時間戳和固定的一個時間戳生成一個差值
2.第二個參數是請求的api
3.再根據js中的拼接規則給拼接出來一個具體的字符串 其中有一個@#是拼接的分隔符
4.在對這個字符串進行加密操做
5.最後對這個字符串進行base64編碼就完成了api
之後遇到遇到加密參數先不要慌,若是是網站不是app的加密參數,仍是有很大的機率能夠弄出來的.分析好url的結構,而後根據引用到的js文件反推加密的過程,這個過程可能會用到fidder或者Charles這樣的工具, 替換掉網站的js(用來窺探一些參數的值,文中沒有給出,打算下次再寫一篇專門介紹下).最後在將加密規則翻譯爲代碼就能夠了.主要花時間的點就在於從js文件中尋找加密的代碼和翻譯加密代碼的過程,要細心有可能加密的部分就是一行,可是倒是最關鍵的點. 再次作個記錄,也幫助其餘朋友破解相似網站來抓取數據,可是不要用來做違反的事情.bash