Advertisement
andrejsstepanovs

api request get body and parse json

Feb 2nd, 2022
1,680
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.14 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "encoding/json"
  5.     "fmt"
  6.     "io"
  7.     "io/ioutil"
  8.     "log"
  9.     "net/http"
  10. )
  11.  
  12. type people struct {
  13.     Number int `json:"number"`
  14. }
  15.  
  16. func main() {
  17.     url := "http://api.open-notify.org/astros.json"
  18.  
  19.     headers := map[string]string{
  20.         "User-Agent": "learninggo",
  21.     }
  22.  
  23.     body, err := callApi(url, http.MethodGet, nil, headers)
  24.     if err != nil {
  25.         log.Fatal(err)
  26.     }
  27.  
  28.     fmt.Println(string(body))
  29.  
  30.     people1 := people{}
  31.     jsonErr := json.Unmarshal(body, &people1)
  32.     if jsonErr != nil {
  33.         log.Fatal(jsonErr)
  34.     }
  35.  
  36.     fmt.Println(people1.Number)
  37. }
  38.  
  39. // callApi makes request to url endpoint
  40. func callApi(url string, method string, reqBody io.Reader, headers map[string]string) ([]byte, error) {
  41.     req, err := http.NewRequest(method, url, reqBody)
  42.     if err != nil {
  43.         log.Fatal(err)
  44.     }
  45.  
  46.     for key, value := range headers {
  47.         req.Header.Set(key, value)
  48.     }
  49.  
  50.     var client http.Client
  51.     res, getErr := client.Do(req)
  52.     if getErr != nil {
  53.         return nil, getErr
  54.     }
  55.  
  56.     if res.Body != nil {
  57.         defer res.Body.Close()
  58.     }
  59.  
  60.     resBody, readErr := ioutil.ReadAll(res.Body)
  61.     if readErr != nil {
  62.         return nil, getErr
  63.     }
  64.  
  65.     return resBody, nil
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement