Day 10 with Go-Lang

less than 1 minute read

HTTP Post 호출

Go 의 표준 패키지인 http 패키지는 웹 관련 클라이언트 및 서버 기능을 제공한다. 그 중 http.Post() 메소드는 웹서버로 간단히 데이터를 POST 하는데 사용된다.

아래 예제는 테스트 웹사이트인 httpbin.org 에 임의 텍스트를 POST 를 사용해 보내는 코드이다. Post() 메소드의 첫 번째 Parameter 는 Post 를 받는 URL 을 적고, 두 번째는 Request Body 의 MIME 타입을, 그리고 마지막에는 전송할 데이터를 보낸다. httpbin.org/post 는 전송한 데이터를 그대로 리턴하는데, Response 의 Data 를 체크하면 전송 데이터가 그대로 리턴됨을 볼 수 있다.

package main

import (
	"bytes"
	"io/ioutil"
	"net/http"
)

func main() {
	// 간단한 http.Post 예제
	reqBody := bytes.NewBufferString("Post plain Text")
	resp, err := http.Post("http://httpbin.org/post", "text/plain", reqBody)
	defer resp.Body.Close()

	if err != nil {
		panic(err)
	}

	respBody, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}

	str := string(respBody)
	println(str)
}
  • HTTP PostForm 호출

http.PostForm() 은 Form 데이터를 보내는 데 유용한 메소드이다. 즉, 일반 웹페이지에서 Submit 버튼을 누르면, 입력 컨트롤들의 데이터를 Form 데이터로 서버에 전송하는데, 이 PostForm() 함수를 사용하면 동일 효과를 내며 데이터를 쉽게 웹 서버로 보낼 수 있다.

아래 예제는 Name 과 Age 데이터를 Form 형식으로 웹서버에 전송하는 예이다. httpbin.org/post 는 전송한 데이터를 그대로 리턴하므로 Response 에서는 form 필드에 Name 과 Age 데이터가 동일함을 확인할 수 있다.

package main

import (
	"io/ioutil"
	"net/http"
	"net/url"
)

func main() {
	// 간단한 http.PostForm 예제
	resp, err := http.PostForm("http://httpbin.org/post", url.Values{"Name": {"Lee"}, "Age": {"10"}})
	defer resp.Body.Close()

	if err != nil {
		panic(err)
	}

	// Response 체크
	respBody, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}

	str := string(respBody)
	println(str)
}

내일 이어서….

Reference : 예제로 배우는 Go 프로그래밍