目錄
聲明?
本文章中所有內(nèi)容僅供學(xué)習(xí)交流使用,不用于其他任何目的,不提供完整代碼,抓包內(nèi)容、敏感網(wǎng)址、數(shù)據(jù)接口等均已做脫敏處理,嚴(yán)禁用于商業(yè)用途和非法用途,否則由此產(chǎn)生的一切后果均與作者無關(guān)!
本文章未經(jīng)許可禁止轉(zhuǎn)載,禁止任何修改后二次傳播,擅自使用本文講解的技術(shù)而導(dǎo)致的任何意外,作者均不負(fù)責(zé),若有侵權(quán),請聯(lián)系作者立即刪除!
一 什么是websocket
二 websocket的原理
三 WebSocket 優(yōu)點(diǎn):
四 websocket與http的關(guān)系
相同點(diǎn):
不同點(diǎn):
五 websocket解決的問題
http存在的問題
websocket的改進(jìn)
WebSocket有以下特點(diǎn):
六 案例:某音直播間數(shù)據(jù)抓取
重點(diǎn):
結(jié)果:
總結(jié)
聲明?
本文章中所有內(nèi)容僅供學(xué)習(xí)交流使用,不用于其他任何目的,不提供完整代碼,抓包內(nèi)容、敏感網(wǎng)址、數(shù)據(jù)接口等均已做脫敏處理,嚴(yán)禁用于商業(yè)用途和非法用途,否則由此產(chǎn)生的一切后果均與作者無關(guān)!
本文章未經(jīng)許可禁止轉(zhuǎn)載,禁止任何修改后二次傳播,擅自使用本文講解的技術(shù)而導(dǎo)致的任何意外,作者均不負(fù)責(zé),若有侵權(quán),請聯(lián)系作者立即刪除!
常用協(xié)議:
常用通信協(xié)議有http/https,?websocket/wss等等,常用的數(shù)據(jù)傳輸協(xié)議有json,xml,protobuf,本章內(nèi)容講解基于websocket協(xié)議和protobuf協(xié)議的數(shù)據(jù)抓取.
websocket與wss的關(guān)系類似http和https? websocket采用雙向通信模式,客戶端與服務(wù)器建立連接后,無論是客戶端還是服務(wù)端都可以隨時將數(shù)據(jù)發(fā)送給對方.
一 什么是websocket
1WebSocket是HTML5下一種新的協(xié)議(websocket協(xié)議本質(zhì)上是一個基于tcp的協(xié)議)
2它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信,能更好的節(jié)省服務(wù)器資源和帶寬并達(dá)到實(shí)時通訊的目的
3Websocket是一個持久化的協(xié)議
4在WebSocket API中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸。
二 websocket的原理
1websocket約定了一個通信的規(guī)范,通過一個握手的機(jī)制,客戶端和服務(wù)器之間能建立一個類似tcp的連接,從而方便它們之間的通信
2在websocket出現(xiàn)之前,web交互一般是基于http協(xié)議的短連接或者長連接
3websocket是一種全新的協(xié)議,不屬于http無狀態(tài)協(xié)議,協(xié)議名為"ws"
三 WebSocket 優(yōu)點(diǎn):
1較少的控制開銷:只需要進(jìn)行一次握手,攜帶一次請求頭信息即可,后續(xù)只傳輸數(shù)據(jù)即可,相比 HTTP 每次請求都攜帶請求頭,WebSocket 非常省資源。
2更強(qiáng)的實(shí)時性:由于服務(wù)器可以主動推送消息,這使得延遲變得可以忽略不計(jì),相比 HTTP 輪詢的時間間隔,WebSocket 可以在相同的時間內(nèi)進(jìn)行多次傳輸.
四 websocket與http的關(guān)系
相同點(diǎn):
-
都是基于tcp的,都是可靠性傳輸協(xié)議
-
都是應(yīng)用層協(xié)議
不同點(diǎn):
-
WebSocket是雙向通信協(xié)議,模擬Socket協(xié)議,可以雙向發(fā)送或接受信息
-
HTTP是單向的
-
WebSocket是需要瀏覽器和服務(wù)器握手進(jìn)行建立連接的
-
而http是瀏覽器發(fā)起向服務(wù)器的連接,服務(wù)器預(yù)先并不知道這個連接
五 websocket解決的問題
http存在的問題
http是一種無狀態(tài)協(xié)議,每當(dāng)一次會話完成后,服務(wù)端都不知道下一次的客戶端是誰,需要每次知道對方是誰,才進(jìn)行相應(yīng)的響應(yīng),因此本身對于實(shí)時通訊就是一種極大的障礙 http協(xié)議采用一次請求,一次響應(yīng),每次請求和響應(yīng)就攜帶有大量的header頭,對于實(shí)時通訊來說,解析請求頭也是需要一定的時間,因此,效率也更低下 最重要的是,需要客戶端主動發(fā),服務(wù)端被動發(fā),也就是一次請求,一次響應(yīng),不能實(shí)現(xiàn)主動發(fā)送
websocket的改進(jìn)
一旦WebSocket連接建立后,后續(xù)數(shù)據(jù)都以幀序列的形式傳輸。在客戶端斷開WebSocket連接或Server端中斷連接前,不需要客戶端和服務(wù)端重新發(fā)起連接請求。在海量并發(fā)及客戶端與服務(wù)器交互負(fù)載流量大的情況下,極大的節(jié)省了網(wǎng)絡(luò)帶寬資源的消耗,有明顯的性能優(yōu)勢,且客戶端發(fā)送和接受消息是在同一個持久連接上發(fā)起,實(shí)現(xiàn)了“真·長鏈接”,實(shí)時性優(yōu)勢明顯。
WebSocket有以下特點(diǎn):
是真正的全雙工方式,建立連接后客戶端與服務(wù)器端是完全平等的,可以互相主動請求。而HTTP長連接基于HTTP,是傳統(tǒng)的客戶端對服務(wù)器發(fā)起請求的模式。 HTTP長連接中,每次數(shù)據(jù)交換除了真正的數(shù)據(jù)部分外,服務(wù)器和客戶端還要大量交換HTTP header,信息交換效率很低。Websocket協(xié)議通過第一個request建立了TCP連接之后,之后交換的數(shù)據(jù)都不需要發(fā)送 HTTP header就能交換數(shù)據(jù),這顯然和原有的HTTP協(xié)議有區(qū)別所以它需要對服務(wù)器和客戶端都進(jìn)行升級才能實(shí)現(xiàn)(主流瀏覽器都已支持HTML5)
六 案例:某音直播間數(shù)據(jù)采集
思路:本地建立websocket通信,通過在瀏覽器注入js代碼實(shí)現(xiàn)瀏覽器端(客戶端)與本地(服務(wù)端)的數(shù)據(jù)轉(zhuǎn)發(fā),從而達(dá)到采集直播間數(shù)據(jù)的功能.
python 代碼接受瀏覽器端返回的數(shù)據(jù)
import websockets
import asyncio
# 發(fā)送 加密參數(shù)
async def echo(websocket):
message = '我是發(fā)送給客戶端的信息'
# 發(fā)送數(shù)據(jù)
await websocket.send(message)
return True
# 接收 客戶端返回的數(shù)據(jù)
async def recv_msg(websocket):
while 1:
# 接收
resv_text = await websocket.recv()
print(resv_text)
async def main_run(websocket):
await echo(websocket)
await recv_msg(websocket)
stat_sever = websockets.serve(main_run,'127.0.0.1',9999)
print('成功建立連接')
loop = asyncio.get_event_loop()
loop.run_until_complete(stat_sever)
# 保持長連接 需要不斷的監(jiān)聽返回的數(shù)據(jù)
loop.run_forever()
重點(diǎn):
重點(diǎn)是如何找到瀏覽器端返回的加密數(shù)據(jù)并且找到解密位置然后注入js代碼進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),這里就不貼出具體位置了,提示,從這個入口進(jìn)入
結(jié)果:
貼一張結(jié)果圖吧
總結(jié)
1出于安全考慮,本章未提供完整流程,調(diào)試環(huán)節(jié)省略較多,只提供大致思路,具體細(xì)節(jié)要你自己還原,相信你也能調(diào)試出來.
2本人寫作水平有限,如有講解不到位或者講解錯誤的地方,還請各位大佬在評論區(qū)多多指教,共同進(jìn)步.技術(shù)探討加v?lyaoyao__i(兩個_,本人)文章來源:http://www.zghlxwxcb.cn/news/detail-645417.html
3本篇分享到這里就結(jié)束了,歡迎大家關(guān)注下期,我們不見不散??????文章來源地址http://www.zghlxwxcb.cn/news/detail-645417.html
到了這里,關(guān)于基于websocket協(xié)議的某音直播間數(shù)據(jù)采集的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!