Files
requests/test/protocol/websocket_test.go
gospider 45c7a3262f sync
2025-07-11 11:54:33 +08:00

76 lines
1.9 KiB
Go

package main
import (
"log"
"net/http"
"strings"
"testing"
"time"
"github.com/gorilla/websocket"
"github.com/gospider007/requests"
)
func websocketServer() {
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true // 允许跨域
},
}
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
return
}
defer conn.Close()
for {
messageType, message, err := conn.ReadMessage()
if err != nil {
break
}
conn.WriteMessage(messageType, []byte("服务端回复:"+string(message)))
}
})
log.Println("WebSocket 服务器启动于 ws://localhost:8080/ws")
log.Fatal(http.ListenAndServe(":8800", nil))
}
func TestWebSocket(t *testing.T) {
go websocketServer()
time.Sleep(time.Second * 1) // Send WebSocket request
response, err := requests.Get(nil, "ws://localhost:8800/ws", requests.RequestOption{DisProxy: true}) // Send WebSocket request
if err != nil {
log.Panic(err)
}
defer response.CloseConn()
wsCli := response.WebSocket()
defer wsCli.Close()
log.Print(wsCli)
log.Print(response.Headers())
log.Print(response.StatusCode())
if err = wsCli.WriteMessage(websocket.TextMessage, "test1122332211"); err != nil { // Send text message
log.Panic(err)
}
n := 0
for {
msgType, con, err := wsCli.ReadMessage() // Receive message
if err != nil {
log.Panic(err)
}
if msgType != websocket.TextMessage {
log.Panic("Message type is not text")
}
log.Print(string(con))
if strings.Contains(string(con), "test1122332211") {
n++
if n > 6 {
break
}
}
if err = wsCli.WriteMessage(websocket.TextMessage, "test1122332211"); err != nil { // Send text message
log.Panic(err)
}
time.Sleep(time.Second * 2)
}
}