package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" "net/http" "github.com/kataras/iris/v12/context" ) const baseURL = "http://localhost:8080" // Available options: // - "gzip", // - "deflate", // - "br" (for brotli), // - "snappy" and // - "s2" const encoding = context.BROTLI var client = http.DefaultClient func main() { fmt.Printf("Running client example on: %s\n", baseURL) getExample() postExample() } func getExample() { endpoint := baseURL + "/" req, err := http.NewRequest(http.MethodGet, endpoint, nil) if err != nil { panic(err) } // Required to receive server's compressed data. req.Header.Set("Accept-Encoding", encoding) resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() // decompress server's compressed reply. cr, err := context.NewCompressReader(resp.Body, encoding) if err != nil { panic(err) } defer cr.Close() body, err := ioutil.ReadAll(cr) if err != nil { panic(err) } fmt.Printf("Received from server: %s", string(body)) } type payload struct { Username string `json:"username"` } func postExample() { buf := new(bytes.Buffer) // Compress client's data. cw, err := context.NewCompressWriter(buf, encoding, -1) if err != nil { panic(err) } json.NewEncoder(cw).Encode(payload{Username: "Edward"}) // `Close` or `Flush` required before `NewRequest` call. cw.Close() endpoint := baseURL + "/" req, err := http.NewRequest(http.MethodPost, endpoint, buf) if err != nil { panic(err) } req.Header.Set("Content-Type", "application/json") // Required to send gzip compressed data to the server. req.Header.Set("Content-Encoding", encoding) // Required to receive server's compressed data. req.Header.Set("Accept-Encoding", encoding) resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() // Decompress server's compressed reply. cr, err := context.NewCompressReader(resp.Body, encoding) if err != nil { panic(err) } defer cr.Close() body, err := ioutil.ReadAll(cr) if err != nil { panic(err) } fmt.Printf("Server replied with: %s", string(body)) }