잠시만 기다려 주세요


 
HOME   |  여기는?   |  바다물때표   |  여러가지 팁 (796)  |  추천 및 재미 (68)  |  자료실 (17)  |  끄적거림 (464)  |  시나리오 (760)  |  드라마 대본 (248)  |  

2019년 09월 20일
실로 쇠는 불속에서 단련되고 사람은 굴욕 속에서 성장하는 법이다. - 성경책
 




    golang

golang - HTTP POST 호출, curl, 클라이언트
이 름 : 바다아이   |   조회수 : 1140         짧은 주소 : 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
번 호 카테고리 제 목 이름 조회수
171 golang golang ... 바다아이 227
170 golang golang gopath, goroot .. 바다아이 254
169 golang golang ... Force download file example 바다아이 512
168 golang golang , , cpu, memory, disk 바다아이 840
167 golang golang , ... GOOS, GOARCH 바다아이 616
166 golang golang checkbox ... 바다아이 742
165 golang golang , , http .... 바다아이 789
164 golang golang nil , nil , nil ... 바다아이 839
163 golang 2 golang, go , .... golang .... 바다아이 1083
162 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 902
161 golang golang postgresql mysql, mariadb scan , null .. 바다아이 964
160 golang golang , iconv 바다아이 1028
159 golang golang quote escape, unquote 바다아이 1028
158 golang golang , http errorLog , , ... 바다아이 1112
157 golang golang interface , 바다아이 1064
156 golang golang struct .... 바다아이 1108
155 golang golang map map , 바다아이 1062
154 golang golang map .... .... 바다아이 1137
153 golang golang slice copy 바다아이 1010
152 golang golang goto 바다아이 1096
151 golang golang slice sort , int, string, float64 바다아이 1140
150 golang URL Parsing, url . parse 바다아이 1146
149 golang golang , interface{} ... 바다아이 1090
148 golang golang interface to string, , , map slice json 바다아이 1060
147 golang golang How to convert JSON string to map and slice, json 바다아이 1064
146 golang golang , file write, Writing Files 바다아이 1221
145 golang golang Insert Line or String to File, , , , , 바다아이 1017
144 golang golang replace 바다아이 1073
143 golang golang split explode , , ... 바다아이 1156
142 golang golang email read parse, , ..... .... 바다아이 1072
| |






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