투케이2K

86. (Go Lang) [Mac Os] Go 문법 : net/http 네트워크 통신 - Post http 요청 수행 및 StatusCode , Header , Body 응답 확인 본문

Go Lang (Go 언어)

86. (Go Lang) [Mac Os] Go 문법 : net/http 네트워크 통신 - Post http 요청 수행 및 StatusCode , Header , Body 응답 확인

투케이2K 2024. 2. 24. 21:44

[개발 환경 설정]

개발 언어 : Go

 

[소스 코드]

 

package main

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

func main() {

	// ---------------------------------------------------
	// [기본 설명]
	// ---------------------------------------------------
	// "io" 패키지는 Go 에서 입출력 스트림 데이터를 처리 시 사용합니다
	// ---------------------------------------------------
	// "net/http" 패키지는 Go 에서 http 통신을 수행 시 사용됩니다
	// ---------------------------------------------------
	// 참고 사이트 : https://pkg.go.dev/net/http
	// ---------------------------------------------------

	// ---------------------------------------------------
	// [HTTP 요청 주소 정의]
	REQ_URL := "https://jsonplaceholder.typicode.com/posts"

	// [구조체 생성]
	en_user := En_User{1, 1}

	// [Json 인코딩 수행 : Marshal]
	jsonBytes, en_err := json.Marshal(en_user)
	if en_err != nil {
		panic(en_err)
	}

	// [Json 바이트를 문자열로 변경]
	jsonString := string(jsonBytes)

	// [Request Body 생성]
	reqBody := bytes.NewBufferString(jsonString)

	// ---------------------------------------------------

	// [Request 객체 정의]
	req, err := http.Post(REQ_URL, "application/json", reqBody)
	if err != nil {
		panic(err)
	}

	// [Request Close]
	defer req.Body.Close()

	// ---------------------------------------------------

	// [Response 데이터 읽기]
	RES_CODE := req.StatusCode // 상태 코드
	RES_HEADER := req.Header   // 응답 헤더

	RES_BYTE, err := io.ReadAll(req.Body) // Body 데이터
	if err != nil {
		panic(err)
	}
	RES_DATA := string(RES_BYTE)

	// ---------------------------------------------------

	// [로그 출력]
	fmt.Println("")
	fmt.Println("----------------------------------------------")
	fmt.Println("[로그 출력 수행]")
	fmt.Println("----------------------------------------------")
	fmt.Println("REQ_URL : ", REQ_URL)
	fmt.Println("----------------------------------------------")
	fmt.Println("REQ_BODY : ", jsonString)
	fmt.Println("----------------------------------------------")
	fmt.Println("RES_CODE : ", RES_CODE)
	fmt.Println("----------------------------------------------")
	fmt.Println("RES_HEADER : ", RES_HEADER)
	fmt.Println("----------------------------------------------")
	fmt.Println("RES_DATA : ", RES_DATA)
	fmt.Println("----------------------------------------------")
	fmt.Println("")

}

// ---------------------------------------------------

// [JSON 인코딩에 사용될 구조체 생성]
type En_User struct {
	UserId int `json:"userId"`
	Id     int `json:"id"`
}

// ---------------------------------------------------
 

[결과 출력]

 

 

반응형
Comments