以前書いたこれの続き
以前書いたgoでのhttpの書き方の内容の続編です。
Postの書き方とAutorizationヘッダーを付けたリクエストを構築するときの方法を備忘録としてまとめました。
標準パッケージはこちら
https://golang.org/pkg/net/http/
Goのhttpを使う
- http.Post(method, url, data)
- http.PostForm(url, data)
- Client{} 型を使う
の三通りの書き方があります。
http.Postを使う
jsonFile, err := os.Open("data.json") if err != nil { // error } resp, err := http.Post("sample.com", "application/json", jsonFile)
http.PostFormを使う
val := url.Values{} val.Add("key", "value") resp, err := http.PostForm("sample.com", val)
Client型を使う
client := http.Clietn{} val := url.Values{} val.Add("key", "value") req, err := http.NewRequest("POST", "sample.com", strings.NewReader(val.Encode())) if err != nil{ // request create error } resp, err := client.Do(req)
GAEを使う
GAE上でhttpリクエストを使うときは以前記載した内容と同じで urlfetch(appengine.context)
を使います。
内容は標準のパッケージのClient型に近い。
Postを使う
// r は *http.Request ctx := appengine.NewContext(r) // GAEのContextを作成する client := urlfetch.Client(ctx) jsonFile, err := os.Open("data.json") if err != nil { // error } resp, err := client.Post("POST", "sample.com", jsonFile)
PostFormを使う
// r は *http.Request ctx := appengine.NewContext(r) // GAEのContextを作成する client := urlfetch.Client(ctx) val := url.Values{} val.Add("key", "value") resp, err := client.PostForm("sample.com", val)
client.Do型を使う
// r は *http.Request ctx := appengine.NewContext(r) // GAEのContextを作成する client := urlfetch.Client(ctx) val := url.Values{} val.Add("key", "value") req, err := http.NewRequest("POST", "sample.com", http.NewReader(val.Encode()) if err != nil { // request create error } resp, err := client.Do(req)
Header情報を追加する
Header情報を付加するには標準パッケージ、GAE、どちらにしてもClient型を使うことになります。
http.Packageのとき
req, err := http.NewRequest("Post", "sapmple.com", url.Values{}) if err != nil{ // request create error } req.Header.Set("ContentType", "application/json") req.Header.Set("Authorization", "XXXXXXXX") // httpパッケージを使う場合 client := http.Client{} resp, err := client.Do(req)
GAEのとき
req, err := http.NewRequest("Post", "sapmple.com", url.Values{}) if err != nil{ // request create error } req.Header.Set("ContentType", "application/json") req.Header.Set("Authorization", "XXXXXXXX") // GAEを使う時 // r は *http.Request ctx := appengine.NewContext(r) client := urlfetch.Client(crx) resp, err := client.Do(req)
Header情報を付与するときは、予め func NewRequest(method, url string, body io.Reader) (*Request, error)
で http.Request
型を生成しておかなければなりません。
その Request
型に対してHeader情報を付与していくことになります。