Go
HTTP 클라이언트
수색…
통사론
- resp, err : = http.Get (url) // 기본 HTTP 클라이언트로 HTTP GET 요청을 작성합니다. 요청이 실패하면 비 nil 오류가 리턴됩니다.
- resp, err : = http.Post (url, bodyType, body) // 기본 HTTP 클라이언트로 HTTP POST 요청을 작성합니다. 요청이 실패하면 비 nil 오류가 리턴됩니다.
- resp, err : = http.PostForm (url, values) // 기본 HTTP 클라이언트로 HTTP 양식 POST 요청을 작성합니다. 요청이 실패하면 비 nil 오류가 리턴됩니다.
매개 변수
매개 변수 | 세부 |
---|---|
~시키다 | HTTP 요청에 대한 *http.Response 유형의 응답 |
잘못하다 | error . nil이 아니면 함수가 호출 될 때 발생하는 오류를 나타냅니다. |
url | HTTP 요청을 할 string 형식의 URL입니다. |
체형 | POST 요청의 본문 페이로드 string 형식의 MIME 유형입니다. |
신체 | POST 요청의 본문 페이로드로 제출하기 위해 오류가 발생할 때까지 읽히는 io.Reader ( Read() )를 구현합니다. |
값 | url.Values 유형의 키 - 값 맵입니다. 기본 유형은 map[string][]string 입니다. |
비고
non-nil 에러를 반환하지 않는 모든 HTTP 요청 후에 defer resp.Body.Close()
를 defer resp.Body.Close()
것이 중요합니다. 그렇지 않으면 리소스가 유출됩니다.
기본 GET
기본 GET 요청을 수행하고 사이트의 내용을 인쇄합니다 (HTML).
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("https://example.com/")
if err != nil {
panic(err)
}
// It is important to defer resp.Body.Close(), else resource leaks will occur.
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
// Will print site contents (HTML) to output
fmt.Println(string(data))
}
URL 매개 변수 및 JSON 응답으로 GET
Stack Exchange API를 사용하여 가장 최근에 활성화 된 StackOverflow 게시물 상위 10 개에 대한 요청입니다.
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
const apiURL = "https://api.stackexchange.com/2.2/posts?"
// Structs for JSON decoding
type postItem struct {
Score int `json:"score"`
Link string `json:"link"`
}
type postsType struct {
Items []postItem `json:"items"`
}
func main() {
// Set URL parameters on declaration
values := url.Values{
"order": []string{"desc"},
"sort": []string{"activity"},
"site": []string{"stackoverflow"},
}
// URL parameters can also be programmatically set
values.Set("page", "1")
values.Set("pagesize", "10")
resp, err := http.Get(apiURL + values.Encode())
if err != nil {
panic(err)
}
defer resp.Body.Close()
// To compare status codes, you should always use the status constants
// provided by the http package.
if resp.StatusCode != http.StatusOK {
panic("Request was not OK: " + resp.Status)
}
// Example of JSON decoding on a reader.
dec := json.NewDecoder(resp.Body)
var p postsType
err = dec.Decode(&p)
if err != nil {
panic(err)
}
fmt.Println("Top 10 most recently active StackOverflow posts:")
fmt.Println("Score", "Link")
for _, post := range p.Items {
fmt.Println(post.Score, post.Link)
}
}
컨텍스트에서 시간 초과 요청
1.7 이상
컨텍스트를 사용하여 HTTP 요청을 시간 초과하는 것은 표준 라이브러리 (하위 라이브러리가 아닌) 만 1.7 이상에서 수행 할 수 있습니다.
import (
"context"
"net/http"
"time"
)
req, err := http.NewRequest("GET", `https://example.net`, nil)
ctx, _ := context.WithTimeout(context.TODO(), 200 * time.Milliseconds)
resp, err := http.DefaultClient.Do(req.WithContext(ctx))
// Be sure to handle errors.
defer resp.Body.Close()
1.7 이전
import (
"net/http"
"time"
"golang.org/x/net/context"
"golang.org/x/net/context/ctxhttp"
)
ctx, err := context.WithTimeout(context.TODO(), 200 * time.Milliseconds)
resp, err := ctxhttp.Get(ctx, http.DefaultClient, "https://www.example.net")
// Be sure to handle errors.
defer resp.Body.Close()
더 읽을 거리
온 자세한 내용은 context
패키지를 참조 컨텍스트 .
JSON 객체의 PUT 요청
다음은 PUT 요청을 통해 User 객체를 업데이트하고 요청의 상태 코드를 인쇄합니다.
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
type User struct {
Name string
Email string
}
func main() {
user := User{
Name: "John Doe",
Email: "[email protected]",
}
// initialize http client
client := &http.Client{}
// marshal User to json
json, err := json.Marshal(user)
if err != nil {
panic(err)
}
// set the HTTP method, url, and request body
req, err := http.NewRequest(http.MethodPut, "http://api.example.com/v1/user", bytes.NewBuffer(json))
if err != nil {
panic(err)
}
// set the request header Content-Type for json
req.Header.Set("Content-Type", "application/json; charset=utf-8")
resp, err := client.Do(req)
if err != nil {
panic(err)
}
fmt.Println(resp.StatusCode)
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow