在爬蟲快手主播信息的時候,發現只要我改動一下參數,比如第一頁 page=1的時候,需要爬下一頁,把page改為2發現提示sign驗證失敗了
也就是說,快手在開發的時候考慮了有人抓包到接口后,通過修改參數的方式繼續獲取下一頁(或者是其他操作,總結就是防止用戶截斷請求修改數據包后提交的做法)
我估計做法大概是在調用接口前,先對所有參數進行一個md5,當用戶改一下值后,md5 出來的值就不對了
然后具體它md5了哪些值,沒法得知,所以,尼瑪靠接口采集有點懸。。。。
但是后來發現,每次我發送同一個參數過去,快手都給我返回了不同的主播列表,這就有點尷尬了。。。。
反正我是想得到主播列表,不管你給我返回什么列表,只要信息對就可以了。。。。然后就繼續采了。。。。。。
誰知道他sign是怎么計算的啊
對apk的反編譯不熟悉,有知道的告知一下。
由此想到之前自己開發的app,一直在苦於怎么樣保證app的接口不被抓包后直接訪問。
我當時的做法是,每次請求,對於重要接口,都加了一個參數叫做 timestamp,然后自己寫了一個方法對這個字符串進行加密,然后一同傳過來。
對於超過5分鍾的timestamp,直接丟棄,用過之后將timestamp保存到數據庫,當收到一個請求后,先查詢該timestamp是否已經被使用,如果是,則返回錯誤。正確的情況下才繼續執行相關邏輯。
這種設計,比起快手app那樣加sign的驗證,實現更為復雜,並且數據數據持久支持(例如數據庫)。因為這個timestamp是否可用,基於數據庫中是否存在。
所以,以后在寫接口的時候,可以仿造這種寫法。