Last active
September 23, 2018 16:17
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 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