| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Package netutil provides network-related helper functions. |
| package netutil |
| |
| import ( |
| "encoding/json" |
| "io" |
| "net/http" |
| ) |
| |
| // HTTPGet gets a response from the given URL and returns it as a byte slice. |
| func HTTPGet(url string) ([]byte, error) { |
| resp, err := http.Get(url) |
| if err != nil { |
| return nil, err |
| } |
| defer resp.Body.Close() |
| |
| return io.ReadAll(resp.Body) |
| } |
| |
| // HTTPGetJSON gets a response from the given URL and stores it in jsonData. |
| // It is the caller's responsibility to make sure the response is in JSON format. |
| func HTTPGetJSON(url string, jsonData interface{}) error { |
| b, err := HTTPGet(url) |
| if err != nil { |
| return err |
| } |
| |
| // Responses start with )]}' to prevent XSSI attacks. Discard them. |
| // See https://gerrit-review.googlesource.com/Documentation/rest-api.html#output |
| return json.Unmarshal(b[4:], jsonData) |
| } |