Go에서 HTTP 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)
}
이 기사가 통찰력이 있기를 바랍니다.
🌎연결해봅시다.
Reference
이 문제에 관하여(Go에서 HTTP POST 요청 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/devkiran/make-an-http-post-request-in-go-29p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)