잠시만 기다려 주세요

     '싸우지 않는 이재명을 규탄한다. 민생충, 협치충, 역풍충.. 국민들은 치가 떨린다.'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (16)  |  여러가지 팁 (1056)  |  추천 및 재미 (151)  |  자료실 (22)  |  
시사, 이슈, 칼럼, 평론, 비평 (600)  |  끄적거림 (129)  |  문예 창작 (705)  |  바람 따라 (69)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    golang

golang - HTTP POST 호출, curl, 클라이언트
이 름 : 바다아이   |   조회수 : 8036         짧은 주소 : https://www.bada-ie.com/su/?731591851230
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
번 호 카테고리 제 목 이름 조회수
179 golang golang , ... 바다아이 1712
178 golang golang , map . 바다아이 1324
177 golang Golang (, , data ) , ... 바다아이 1328
176 golang golang sort ... 바다아이 1559
175 golang golang html.EscapeString html.UnescapeString input value ... 바다아이 1685
174 golang golang go.mod go.sum . GOPATH SRC not module, 1.16 . 바다아이 4957
173 golang go 1.16 ... is not in GOROOT.. GOPATH .... . 바다아이 5843
172 golang , String Formatting 바다아이 7491
171 golang rand.Intn , random, , . 바다아이 6950
170 golang golang ... 바다아이 10028
169 golang golang gopath, goroot .. golang 바다아이 7613
168 golang golang ... Force download file example 바다아이 9412
167 golang golang , , cpu, memory, disk 바다아이 10700
166 golang golang , ... GOOS, GOARCH 바다아이 8482
165 golang golang checkbox ... 바다아이 8228
164 golang golang , , http .... 바다아이 8007
163 golang golang nil , nil , nil ... 바다아이 8351
162 golang 2 golang, go , .... golang .... 바다아이 11214
161 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 8543
160 golang golang postgresql mysql, mariadb scan , null .. 바다아이 8681
159 golang golang , iconv 바다아이 11480
158 golang golang quote escape, unquote 바다아이 8882
157 golang golang , http errorLog , , ... 바다아이 8992
156 golang golang interface , 바다아이 8456
155 golang golang struct .... 바다아이 9128
154 golang golang map map , 바다아이 8660
153 golang golang map .... .... 바다아이 8178
152 golang golang slice copy 바다아이 8273
151 golang golang goto 바다아이 9127
150 golang golang slice sort , int, string, float64 바다아이 8605
| |









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