自從弄了個(gè) lcd4linux 之后總想著弄點(diǎn)什么自動(dòng)化的東西顯示出來(lái)伟姐,因?yàn)樽罱鼜膱D書(shū)館借了點(diǎn)書(shū)杭跪,于是首先想到的是抓圖書(shū)館的借閱信息谐区。
我實(shí)現(xiàn)的思路大概來(lái)說(shuō)就是,用腳本模仿正常登錄查詢(xún)的步驟來(lái)發(fā)出并處理請(qǐng)求:先用 Wireshark 對(duì)我請(qǐng)求的過(guò)程抓包(最方便的方式了吧)膳帕,然后獲取到整個(gè)過(guò)程中的 HTTP 請(qǐng)求,接著查看每個(gè)請(qǐng)求都用了什么方法薇缅、發(fā)了哪些字段危彩,最后分析出必要的請(qǐng)求并模仿之,逐一發(fā)送出去泳桦,然后保存獲取到的 HTML 頁(yè)面內(nèi)容并過(guò)濾出有用的內(nèi)容汤徽。
這個(gè)操作,流程雖說(shuō)簡(jiǎn)單但略微繁瑣而且有需要注意的地方蓬痒。我是用 curl 命令來(lái)模仿這些過(guò)程泻骤,當(dāng)發(fā)送 POST 請(qǐng)求的時(shí)候,發(fā)送出去的數(shù)據(jù)是經(jīng)過(guò)了 URL 編碼的梧奢,里面所有的特殊字符全部都會(huì)變成 URL 編碼格式的字符狱掂,但我忽略了這一點(diǎn),導(dǎo)致服務(wù)器不能正確響應(yīng)請(qǐng)求而只獲取到了錯(cuò)誤頁(yè)面亲轨。
除了第一次請(qǐng)求之外趋惨,其他的請(qǐng)求都要保存 cookie 來(lái)保持會(huì)話(huà)的一致性。學(xué)校的圖書(shū)館系統(tǒng)是分開(kāi)兩個(gè)并布置在在不同的端口上的惦蚊,但之間的會(huì)話(huà)一致性貌似只是通過(guò)普通的發(fā)送賬號(hào)密碼并 JS 模仿登錄框操作來(lái)實(shí)現(xiàn)(我沒(méi)詳細(xì)測(cè)試器虾,不知道兩個(gè)系統(tǒng)之間是否有 session 轉(zhuǎn)移的問(wèn)題),要注意兩個(gè)不同的服務(wù)器的端口號(hào)蹦锋。
在對(duì)第二個(gè)系統(tǒng)進(jìn)行數(shù)據(jù)的查詢(xún)的時(shí)候兆沙,發(fā)現(xiàn)了一個(gè)問(wèn)題。瀏覽器地址欄上面的地址并不是真實(shí)的頁(yè)面地址莉掂,而是通過(guò) JS 改寫(xiě)地址欄之后的地址葛圃。直接使用 curl 查詢(xún)的話(huà)會(huì)得出一個(gè) "Object has remove to here"的頁(yè)面,里面那個(gè) here 是個(gè)超鏈接,指向之處才是真正的頁(yè)面的地址库正。請(qǐng)求了真實(shí)頁(yè)面地址之后曲楚,JS 會(huì)復(fù)寫(xiě)瀏覽器的地址為原來(lái)用戶(hù)點(diǎn)擊的超鏈接的地址。不知道這用意何在褥符,但如果只是為了隱藏真實(shí)頁(yè)面地址的話(huà)我只能說(shuō)這嫩得一逼啊……
關(guān)于如何用命令提取有用信息龙誊,我在下一個(gè)部分里再講。