Websocket: [question] How to get response header in client.go

Created on 18 Jul 2019  Â·  3Comments  Â·  Source: gorilla/websocket

Describe the problem you're having

A clear and concise description of what the bug is.
How can I get the response header in client.go
…

Versions

Go version: go version
go version go1.12.7 windows/amd64
…

"Show me the code!"

A minimal code snippet can be useful, otherwise we're left guessing!
…

// client.go
package main

import (
    "flag"
    "fmt"
    "log"
    "net/http"
    "net/url"
    "os"
    "os/signal"
    "encoding/json"

    "github.com/gorilla/websocket"
)

var (
    addr = flag.String("addr", "127.0.0.1:17505", "http service address")
    path = flag.String("path", "/ws", "ws path")
    auth = flag.String("auth", "","auth key")
    data = flag.String("data", "ping","put data,eg: ping")
)

func usage() {
    fmt.Printf("Usage Example: %s -data 'ping'\n", os.Args[0])
    fmt.Printf("Usage Example: %s -data '%s'\n", os.Args[0],
        `{reqid:"10000",eid:"11111",action:"on",uptime:"1111111"}`)
    flag.PrintDefaults()
}

func init(){
    flag.Usage = usage
}

func main() {
    flag.Parse()

    log.SetFlags(0)

    interrupt := make(chan os.Signal, 1)
    signal.Notify(interrupt, os.Interrupt)

    u := url.URL{Scheme: "ws", Host: *addr, Path: *path}
    log.Printf("connecting to %s", u.String())

    h := http.Header{"X-Websocket-Key": []string{*auth} }
    c, _, err := websocket.DefaultDialer.Dial(u.String(), h)
    if err != nil {
        log.Fatal("dial:", err)
    }
    defer c.Close()

    // print request header
    h2, _ := json.Marshal(h)
    fmt.Printf("request header: %s\n",h2)

    done := make(chan struct{})


    go func() {
        defer close(done)
        for {
            _, message, err := c.ReadMessage()
            if err != nil {
                log.Println("read:", err)
                return
            }
            log.Printf("recv: %s", message)
        }
    }()

    err = c.WriteMessage(websocket.TextMessage, []byte(*data))
    if err != nil {
        log.Println("write:", err)
        return
    }
    fmt.Println("send: ",*data)

    for {
        select {
        case <-done:
            return
        case <-interrupt:
            log.Println("interrupt")
            err := c.WriteMessage(websocket.CloseMessage, 
                websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
            if err != nil {
                log.Println("write close:", err)
                return
            }
            return
        }
    }
}
question

Most helpful comment

c, resp, err := websocket.DefaultDialer.Dial(u.String(), h)
header := resp.Header

All 3 comments

c, resp, err := websocket.DefaultDialer.Dial(u.String(), h)
header := resp.Header
c, resp, err := websocket.DefaultDialer.Dial(u.String(), h)
header := resp.Header

Cool, Thank you very much. :-)

Closing as resolved, but let us know if any more questions.

Was this page helpful?
0 / 5 - 0 ratings