How to send a POST request in Go?

How to send a POST request in Go? For example, send a POST of content like ‘id=8’ to a URL like https://example.com/api.

In Go, the http package provides many common functions for GET/POST. Related to POST requests, the package provides 2 APIs:

Post

Post issues a POST to the specified URL.

func (c *Client) Post(url, contentType string, body io.Reader) (resp *Response, err error)

PostForm

PostForm issues a POST to the specified URL, with data’s keys and values URL-encoded as the request body. The Content-Type header is set to application/x-www-form-urlencoded.

func (c *Client) PostForm(url string, data url.Values) (resp *Response, err error)

Examples

Use PostForm to submit forms

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

// ...

response, err := http.PostForm("https://example.com/api", url.Values{"id": {"8"}})

if err != nil {
    // postForm error happens
} else {
    defer response.Body.Close()
    body, err := ioutil.ReadAll(response.Body)

    if err != nil {
        // read response error
    } else {
        // now handle the response
    }
}

Use Post

Here, we post a JSON to an API endpoint as an example

values := map[string]string{"id": "8"}
jsonValue, _ := json.Marshal(values)
resp, err := http.Post("https://example.com/api", "application/json", bytes.NewBuffer(jsonValue))
// check err
// read from resp, remember do close the body

Similar Posts

  • How to redirect STDOUT of sudo command on Linux and write to file as root?

    A try like the following command failed $ sudo echo “echo hello” > /usr/local/bin/hello with an message bash: /usr/local/bin/hello: Permission denied It seems the writing to the file is executed under the non-root user. How to redirect STDOUT of sudo command on Linux and write the content to the file (/usr/local/bin/hello here) as root? You…

  • MFC程序使用系统风格界面

    VC6默认编译出来的程序在XP下Luma风格下运行也是Windows的经典界面, 有损界面的美观与统一. VC2008默认设置下如果不是使用的unicode也是如此. 本文给出使VC6和VC2008可以编译出使用系统界面风格的解决方案. 1. 使VC6编译出使用系统风格的程序 步骤如下: 1) 创建一个.manifest文件的资源. 在res/文件夹下创建一个跟以程序名加.manifest的文件, 如果程序为test.exe, 则创建test.exe.manifest 文件可由此下载: https://www.systutorials.com/t/g/programming/resultcollector.manifest/ 注意要使用utf-8编码保存。 2) 将新定义的资源加入到.rc2文件中, 类型设为24. 打开res/文件夹下的.rc2文件, 在其中加入如下定义: 1 24 MOVEABLE PURE “res/test.exe.manifest” 其中的文件地址按1)步中修改的设置即可. 之后编译即可, 为了使程序界面可能充分利用系统的界面特性, 可以将界面字体设置为TrueType类型的, 利用Windows XP等系统的屏幕字体平滑特性. 2. 使VC2008编译出使用系统风格的程序 在VC2008下就比较简单了, 如果程序字符集使用unicode则默认就是使用系统界面风格的, 如果选择其它的类型, 则编辑下stdafx.h即可. 最后面部分找到这么一段: #ifdef _UNICODE #if defined _M_IX86 #pragma comment(linker,”/manifestdependency:”type=’win32′ name=’Microsoft.Windows.Common-Controls’ version=’6.0.0.0′ processorArchitecture=’x86′ publicKeyToken=’6595b64144ccf1df’ language=’*'””) #elif defined _M_IA64 #pragma comment(linker,”/manifestdependency:”type=’win32’…