Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Go言語 http POSTする際のContent-Type

More than 3 years have passed since last update.

http pkg を使って postする際、
リクエストヘッダの違いで、若干ハマったのでメモ。

はじめに

net/http pkg の使い方に関しては、
こちらの記事が詳しいので、参考にさせていただきました。

Go net/httpパッケージの概要とHTTPクライアント実装例

コード例

■パラメータをURLエンコードする場合

要はContent-Type が、 application/x-www-form-urlencoded の場合です。

net/url pkg で定義されている type Values を使ってます。
https://golang.org/pkg/net/url/#example_Values

package hoge

import (
    "net/http"
    "net/url"
    "strings"
)

func HttpPost(url, token, device string) error {
    values := url.Values{}
    values.Set("token", token)
    values.Add("device", device)

    req, err := http.NewRequest(
        "POST",
        url,
        strings.NewReader(values.Encode()),
    )
    if err != nil {
        return err
    }

    // Content-Type 設定
    req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    return err
}

■パラメータがjson形式の場合

Content-Type が、 application/json の場合。
jsonStr という変数名の未加工文字列リテラルで、
json形式のパラメータを記述しています。

package hoge

import (
    "net/http"
    "net/url"
    "bytes"
)

func HttpPost(url, token, device string) error {
    jsonStr := `{"token":"` + token + `","device":"` + device + `"}`

    req, err := http.NewRequest(
        "POST",
        url,
        bytes.NewBuffer([]byte(jsonStr)),
    )
    if err != nil {
        return err
    }

    // Content-Type 設定
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    return err
}

参考
http://stackoverflow.com/questions/24455147/go-lang-how-send-json-string-in-post-request

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away