Go에서 HTTP POST 요청 만들기

Go에서 HTTP POST 요청을 만드는 방법을 살펴보겠습니다. JSON 본문을 사용하여 엔드포인트에 POST 요청을 수행하고 콘솔에 결과를 표시합니다.

끝점은 id , title , body , userId 를 수락하고 새 post 를 만듭니다.
http-request 라는 새 폴더를 만듭니다.

mkdir http-request

cd http-request

touch main.go

main.go를 열고 필요한 패키지를 가져옵니다.

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)


API에서 받은 데이터를 모델링하는 구조체를 만듭니다.

type Post struct {
    Id     int    `json:"id"`
    Title  string `json:"title"`
    Body   string `json:"body"`
    UserId int    `json:"userId"`
}


메서드를 사용하여 POST 요청을 생성합니다http.NewRequest.

func main() {
    // HTTP endpoint
    posturl := "https://jsonplaceholder.typicode.com/posts"

    // JSON body
    body := []byte(`{
        "title": "Post title",
        "body": "Post description",
        "userId": 1
    }`)

    // Create a HTTP post request
    r, err := http.NewRequest("POST", posturl, bytes.NewBuffer(body))
    if err != nil {
        panic(err)
    }
}


HTTP 요청 헤더를 설정합니다.

r.Header.Add("Content-Type", "application/json")


클라이언트를 생성하고 메서드를 사용하여 게시 요청을 만듭니다client.Do.

client := &http.Client{}
res, err := client.Do(r)
if err != nil {
    panic(err)
}

defer res.Body.Close()


응답 본문을 받는 json.NewDecoder 함수와 Post 유형의 변수를 받는 디코딩 함수를 사용하여 JSON 응답을 디코딩해 보겠습니다.

post := &Post{}
derr := json.NewDecoder(res.Body).Decode(post)
if derr != nil {
    panic(derr)
}


HTTP 상태 코드가 201 와 같지 않으면 패닉이 발생합니다.

if res.StatusCode != http.StatusCreated {
    panic(res.Status)
}


마지막으로 새로 생성된 게시물을 콘솔에 출력합니다.

fmt.Println("Id:", post.Id)
fmt.Println("Title:", post.Title)
fmt.Println("Body:", post.Body)
fmt.Println("UserId:", post.UserId)


다음은 전체 작업 코드입니다.

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

type Post struct {
    Id     int    `json:"id"`
    Title  string `json:"title"`
    Body   string `json:"body"`
    UserId int    `json:"userId"`
}

func main() {
    posturl := "https://jsonplaceholder.typicode.com/posts"

    body := []byte(`{
        "title": "Post title",''
        "body": "Post description",
        "userId": 1
    }`)

    r, err := http.NewRequest("POST", posturl, bytes.NewBuffer(body))
    if err != nil {
        panic(err)
    }

    r.Header.Add("Content-Type", "application/json")

    client := &http.Client{}
    res, err := client.Do(r)
    if err != nil {
        panic(err)
    }

    defer res.Body.Close()

    post := &Post{}
    derr := json.NewDecoder(res.Body).Decode(post)
    if derr != nil {
        panic(derr)
    }

    if res.StatusCode != http.StatusCreated {
        panic(res.Status)
    }

    fmt.Println("Id:", post.Id)
    fmt.Println("Title:", post.Title)
    fmt.Println("Body:", post.Body)
    fmt.Println("UserId:", post.UserId)
}


이 기사가 통찰력이 있기를 바랍니다.

🌎연결해봅시다.
  • 내 블로그 kirandev.com
  • 팔로우
  • Github에서 나를 찾아라
  • 좋은 웹페이지 즐겨찾기