websocket

首先本篇文章的主要目的是了解websocket協(xié)議,并將其使用在爬蟲領(lǐng)域

什么是websocket

websocket(簡(jiǎn)稱ws)是一個(gè)基礎(chǔ)tcp連接的通信協(xié)議,通過http(一次握手)建立連接,與http協(xié)議最大不同的是: websocket是全雙工通信,服務(wù)器可以主動(dòng)向客戶端發(fā)送消息,而http1.1是半雙工,只能等待客戶端請(qǐng)求給響應(yīng)。
協(xié)議標(biāo)識(shí)符是ws(如果加密,則為wss),服務(wù)器網(wǎng)址就是 URL。

ws://example.com:80/some/path

那么與爬蟲又有什么關(guān)系呢?
在web爬蟲,我們經(jīng)常會(huì)JavaScript逆向分析一個(gè)參數(shù)的生成,大部分的做法是把相關(guān)代碼扣到本地調(diào)試分析,補(bǔ)充瀏覽器環(huán)境,使用node開發(fā)一個(gè)express接口,供爬蟲調(diào)用。
使用了websocket之后,我們只需找到參數(shù)加密函數(shù)入口,使用中間人攻擊方式向?yàn)g覽器注入js(讓瀏覽器成為websocket客戶端),使用python編寫websocket服務(wù)端,并開發(fā)一個(gè)api,爬蟲向這個(gè)api提交參數(shù),該api將參數(shù)轉(zhuǎn)給服務(wù)端函數(shù),服務(wù)端將參數(shù)發(fā)送給瀏覽器(前面注入的js),瀏覽器拿到參數(shù),會(huì)調(diào)用加密函數(shù)對(duì)參數(shù)進(jìn)行處理,得到結(jié)果返回給服務(wù)端。

websocket的使用

1. 客戶端API

使用JavaScript實(shí)現(xiàn),使用中間人攻擊將這段腳本注入

阮大寫的很全,這里做簡(jiǎn)單記錄

// 創(chuàng)建一個(gè)websocket實(shí)例
var ws = new WebSocket('ws://localhost:8080');
  • webSocket.onopen 用于指定連接成功后的回調(diào)函數(shù)
  • webSocket.onclose 用于指定連接關(guān)閉后的回調(diào)函數(shù)
  • webSocket.onmessage 用于指定收到服務(wù)器數(shù)據(jù)后的回調(diào)函數(shù)
  • webSocket.send 用于向服務(wù)器發(fā)送數(shù)據(jù)
  • webSocket.readyState 返回實(shí)例對(duì)象的當(dāng)前狀態(tài)

具體案例

haha
服務(wù)端API

使用python實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容