Skip to content

Instantly share code, notes, and snippets.

@Eggbertx
Last active September 23, 2018 16:17
Show Gist options
  • Select an option

  • Save Eggbertx/764e38e7f8ebd7a816903e0333617276 to your computer and use it in GitHub Desktop.

Select an option

Save Eggbertx/764e38e7f8ebd7a816903e0333617276 to your computer and use it in GitHub Desktop.
makePostForm is a convenient function for easily creating POST HTTP requests in Go
// package main
import (
"bytes"
"io"
"mime/multipart"
"net/http"
"os"
"strings"
)
// example usage
func sendPostRequest(someURL string) error {
var err error
var request *http.Request
var uploadFile *os.File
var client *http.Client
client = &http.Client{}
if uploadFile, err = os.Open("something.txt"); err != nil {
return err
}
if request, err = makePostForm(someURL,
map[string]string{
"key1": "key1val",
"key2": "key2val",
// ...
map[string]*os.File{
"file": uploadFile,
},
); err != nil {
return err
}
// optionally do stuff with request (e.g. add headers)
// send the request and return any errors
_,err = client.Do(request)
return err
}
func makePostForm(url string, fields map[string]string, files map[string]*os.File) (*http.Request, error) {
buf := new(bytes.Buffer)
writer := multipart.NewWriter(buf)
var err error
var request *http.Request
for key, value := range fields {
formWriter, err := writer.CreateFormField(key)
if err != nil {
return nil, err
}
if _, err = io.Copy(formWriter, strings.NewReader(value)); err != nil {
return nil, err
}
}
for key, value := range files {
if value == nil {
break
}
fileWriter, err := writer.CreateFormFile(key, value.Name())
if err != nil {
return nil, err
}
if _, err = io.Copy(fileWriter, files[key]); err != nil {
return nil, err
}
}
if err := writer.Close(); err != nil {
return nil, err
}
if request, err = http.NewRequest("POST", url, buf); err != nil {
return nil, err
}
request.Header.Set("Content-Type", writer.FormDataContentType())
return request, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment