잠시만 기다려 주세요


 
HOME   |  여기는?   |  바다물때표   |  여러가지 팁 (775)  |  추천 및 재미 (15)  |  자료실 (18)  |  끄적거림 (443)  |  시나리오 (757)  |  드라마 대본 (248)  |  

2019년 06월 20일
두려움과 고통을 즐길 줄 알아야 한다. 문제에서의 도피는 또다시 같은 문제를 양산하곤 한다. - 바다아이
 

    golang

golang - HTTP POST 호출, curl, 클라이언트
이 름 : 바다아이   |   조회수 : 891         짧은 주소 : https://www.bada-ie.com/su/?461523306009
1. HTTP Post 호출

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

아래 예제는 테스트 웹사이트인 httpbin.org에 임의의 텍스트를 POST를 사용해서 보내는 코드이다. 
Post()메서드의 첫번째 파라미터는 Post를 받는 URL을 적고, 두번째는 Request Body의 MIME 타입을, 
그리고 마지막에는 전송할 데이타를 (io.Reader로) 보낸다. 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)
    if err != nil {
        panic(err)
    }
 
    defer resp.Body.Close()
 
    // Response 체크.
    respBody, err := ioutil.ReadAll(resp.Body)
    if err == nil {
        str := string(respBody)
        println(str)
    }
}

2. 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 main1() {
    // 간단한 http.PostForm 예제
    resp, err := http.PostForm("http://httpbin.org/post", url.Values{"Name": {"Lee"}, "Age": {"10"}})
    if err != nil {
        panic(err)
    }
 
    defer resp.Body.Close()
 
    // Response 체크.
    respBody, err := ioutil.ReadAll(resp.Body)
    if err == nil {
        str := string(respBody)
        println(str)
    }
}

3. JSON 데이타 POST

JSON 데이타를 Post하는 것은 위의 Plain Text를 Post하는 것과 비슷하다. 
다만, 데이타가 JSON 포맷이므로 http.Post()의 두번째 파라미터에 application/json를 적고, 
세번째 파라미터에 JSON으로 인코딩된 데이타를 전달하면 된다. 
아래 예제에서 JSON 데이타는 encoding/json 표준 패키지의 Marshal() 함수를 써서 
임의의 구조체 데이타를 JSON으로 변경하는 방법을 썼다. 


package main
 
import (
    "bytes"
    "encoding/json"
    "io/ioutil"
    "net/http"
)
 
//Person -
type Person struct {
    Name string
    Age  int
}
 
func main() {
    person := Person{"Alex", 10}
    pbytes, _ := json.Marshal(person)
    buff := bytes.NewBuffer(pbytes)
    resp, err := http.Post("http://httpbin.org/post", "application/json", buff)
 
    //...(elided)...
}   

4. XML 데이타 POST

XML 데이타를 Post하는 것을 위의 JSON 데이타를 Post하는 것과 비슷하다. 
다만, 데이타를 XML 포맷으로 전달하므로, encoding/xml 패키지를 사용하여 마샬링하고, 
MIME 타입을 application/xml 으로 지정한다. 


package main
 
import (
    "bytes"
    "encoding/xml"
    "io/ioutil"
    "net/http"
)
 
//Person -
type Person struct {
    Name string
    Age  int
}
 
func main() {
    person := Person{"Alex", 10}
    pbytes, _ := xml.Marshal(person)  // xml marshal
    buff := bytes.NewBuffer(pbytes)
    resp, err := http.Post("http://httpbin.org/post", "application/xml", buff)
    //...(elided)...
}   

지금까지 위의 POST 예제들은 간편한 http.Post() 함수를 사용하였는데, 
보다 세밀한 제어를 위해 Request 객체를 만들어 여러 셋팅을 변경한 후 http.Client를 통해 호출할 수도 있다. 


package main
 
import (
    "bytes"
    "encoding/xml"
    "io/ioutil"
    "net/http"
)
 
//Person -
type Person struct {
    Name string
    Age  int
}
 
func main() {
    person := Person{"Alex", 10}
    pbytes, _ := xml.Marshal(person)
    buff := bytes.NewBuffer(pbytes)
 
    // Request 객체 생성
    req, err := http.NewRequest("POST", "http://httpbin.org/post", buff)
    if err != nil {
        panic(err)
    }
 
    //Content-Type 헤더 추가
    req.Header.Add("Content-Type", "application/xml")
 
    // Client객체에서 Request 실행
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
 
    // Response 체크.
    respBody, err := ioutil.ReadAll(resp.Body)
    if err == nil {
        str := string(respBody)
        println(str)
    }
}


출처 : http://golang.site/go/article/103-HTTP-POST-%ED%98%B8%EC%B6%9C
| |


      1 page / 6 page
번 호 카테고리 제 목 이름 조회수
169 golang golang ... Force download file example 바다아이 214
168 golang golang , , cpu, memory, disk 바다아이 518
167 golang golang , ... GOOS, GOARCH 바다아이 368
166 golang golang checkbox ... 바다아이 443
165 golang golang , , http .... 바다아이 497
164 golang golang nil , nil , nil ... 바다아이 514
163 golang 2 golang, go , .... golang .... 바다아이 714
162 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 588
161 golang golang postgresql mysql, mariadb scan , null .. 바다아이 641
160 golang golang , iconv 바다아이 705
159 golang golang quote escape, unquote 바다아이 699
158 golang golang , http errorLog , , ... 바다아이 779
157 golang golang interface , 바다아이 732
156 golang golang struct .... 바다아이 775
155 golang golang map map , 바다아이 739
154 golang golang map .... .... 바다아이 794
153 golang golang slice copy 바다아이 708
152 golang golang goto 바다아이 776
151 golang golang slice sort , int, string, float64 바다아이 820
150 golang URL Parsing, url . parse 바다아이 807
149 golang golang , interface{} ... 바다아이 779
148 golang golang interface to string, , , map slice json 바다아이 744
147 golang golang How to convert JSON string to map and slice, json 바다아이 748
146 golang golang , file write, Writing Files 바다아이 896
145 golang golang Insert Line or String to File, , , , , 바다아이 710
144 golang golang replace 바다아이 765
143 golang golang split explode , , ... 바다아이 817
142 golang golang email read parse, , ..... .... 바다아이 762
141 golang golang smtp email sendmail 바다아이 795
140 golang golang sort , example, struct, 바다아이 830
| |






Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ FreeBSD + GoLang + PostgreSQL ]
서버위치 : New Jersey  실행시간 : 0.04279
to webmaster... gogo sea. gogo sea.