選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

103 行
2.1KB

  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "log"
  8. "mime/multipart"
  9. "net/http"
  10. "os"
  11. )
  12. //post a file to a url
  13. func postFileForm(filename string, targetURL string, formFieldName string) (strJSON string, err error) {
  14. bodyBuf := &bytes.Buffer{}
  15. bodyWriter := multipart.NewWriter(bodyBuf)
  16. // this step is very important
  17. fileWriter, err := bodyWriter.CreateFormFile(formFieldName, filename)
  18. if err != nil {
  19. fmt.Println(err)
  20. return "", err
  21. }
  22. // open file handle
  23. fh, err := os.Open(filename)
  24. if err != nil {
  25. fmt.Println(err)
  26. return "", err
  27. }
  28. //iocopy
  29. _, err = io.Copy(fileWriter, fh)
  30. if err != nil {
  31. return "", err
  32. }
  33. contentType := bodyWriter.FormDataContentType()
  34. bodyWriter.Close()
  35. resp, err := http.Post(targetURL, contentType, bodyBuf)
  36. if err != nil {
  37. return "", err
  38. }
  39. defer resp.Body.Close()
  40. r, err := ioutil.ReadAll(resp.Body)
  41. strJSON = string(r)
  42. if err != nil {
  43. return "", err
  44. }
  45. fmt.Println(resp.Status)
  46. fmt.Println(string(strJSON))
  47. return strJSON, nil
  48. }
  49. func postJSON(jsonB []byte, targetURL string) (resp string, err error) {
  50. headers := map[string]string{}
  51. headers["Content-Type"] = "application/json"
  52. return postRAW(jsonB, targetURL, headers)
  53. }
  54. func postRAW(data []byte, targetURL string, headers map[string]string) (resp string, err error) {
  55. return httpRaw("POST", targetURL, data, headers)
  56. }
  57. func putRAW(data []byte, targetURL string, headers map[string]string) (resp string, err error) {
  58. return httpRaw("PUT", targetURL, data, headers)
  59. }
  60. func httpRaw(httpMethod, targetURL string, data []byte, headers map[string]string) (resp string, err error) {
  61. req, err := http.NewRequest(httpMethod, targetURL, bytes.NewBuffer(data))
  62. if err != nil {
  63. return
  64. }
  65. if headers != nil {
  66. for k, v := range headers {
  67. req.Header.Set(k, v)
  68. }
  69. }
  70. client := &http.Client{}
  71. r, err := client.Do(req)
  72. if err != nil {
  73. return
  74. }
  75. defer r.Body.Close()
  76. // dump, err := httputil.DumpResponse(r, true)
  77. // if err != nil {
  78. // log.Fatal(err)
  79. // }
  80. // fmt.Printf("dump : %q", dump)
  81. b, _ := ioutil.ReadAll(r.Body)
  82. resp = string(b)
  83. log.Println(resp)
  84. return
  85. }