package main import ( "bytes" "compress/gzip" "encoding/json" "fmt" "io" "net/http" ) var client = http.DefaultClient const baseURL = "http://localhost:8080" 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", "gzip") resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() // decompress server's compressed reply. r, err := gzip.NewReader(resp.Body) if err != nil { panic(err) } defer r.Close() body, err := io.ReadAll(r) 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. w := gzip.NewWriter(buf) b, err := json.Marshal(payload{Username: "Edward"}) if err != nil { panic(err) } w.Write(b) w.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", "gzip") // Required to receive server's compressed data. req.Header.Set("Accept-Encoding", "gzip") resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() // Decompress server's compressed reply. r, err := gzip.NewReader(resp.Body) if err != nil { panic(err) } defer r.Close() body, err := io.ReadAll(r) if err != nil { panic(err) } fmt.Printf("Server replied with: %s", string(body)) }