Converting curl -F to golang

huangapple go评论118阅读模式
英文:

Converting curl -F to golang

问题

我正在尝试将用于发送电子邮件的Mailgun curl命令转换为Golang代码。这是原始的curl命令:

  1. curl -s --user 'api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0' \
  2. https://api.mailgun.net/v3/samples.mailgun.org/messages \
  3. -F from='Excited User <excited@samples.mailgun.org>' \
  4. -F to='devs@mailgun.net' \
  5. -F subject='Hello' \
  6. -F text='Testing some Mailgun awesomeness!'

更新后的代码如下:

  1. var b bytes.Buffer
  2. w := multipart.NewWriter(&b)
  3. fw, err := w.CreateFormField("from")
  4. if err != nil {
  5. log.Println(err)
  6. }
  7. _, err = fw.Write([]byte("Excited User <excited@samples.mailgun.org>"))
  8. if err != nil {
  9. log.Println(err)
  10. }
  11. fw, err = w.CreateFormField("to")
  12. if err != nil {
  13. log.Println(err)
  14. }
  15. _, err = fw.Write([]byte("devs@mailgun.net"))
  16. if err != nil {
  17. log.Println(err)
  18. }
  19. fw, err = w.CreateFormField("subject")
  20. if err != nil {
  21. log.Println(err)
  22. }
  23. _, err = fw.Write([]byte("Hello"))
  24. if err != nil {
  25. log.Println(err)
  26. }
  27. fw, err = w.CreateFormField("text")
  28. if err != nil {
  29. log.Println(err)
  30. }
  31. _, err = fw.Write([]byte("Testing some Mailgun awesomeness!"))
  32. if err != nil {
  33. log.Println(err)
  34. }
  35. w.Close()
  36. req, err := http.NewRequest("POST", "https://api.mailgun.net/v3/samples.mailgun.org/messages", &b)
  37. if err != nil {
  38. log.Println(err)
  39. }
  40. req.SetBasicAuth("api", "key-3ax6xnjp29jd6fds4gc373sgvjxteol0")
  41. req.Header.Add("Content-Type", w.FormDataContentType())
  42. resp, err := http.DefaultClient.Do(req)
  43. if err != nil {
  44. log.Println(err)
  45. }
  46. defer resp.Body.Close()
  47. fmt.Printf("Resp: %s\n", resp)

我当然已经将api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0https://api.mailgun.net/v3/samples.mailgun.org/messagesdevs@mailgun.net更改为我的API密钥和电子邮件地址,但似乎不起作用。

请问有人可以帮忙看看我可能做错了什么吗?

英文:

I'm trying to convert the mailgun curl command for sending email to golang. This is the original curl:

  1. curl -s --user &#39;api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0&#39; \
  2. https://api.mailgun.net/v3/samples.mailgun.org/messages \
  3. -F from=&#39;Excited User &lt;excited@samples.mailgun.org&gt;&#39; \
  4. -F to=&#39;devs@mailgun.net&#39; \
  5. -F subject=&#39;Hello&#39; \
  6. -F text=&#39;Testing some Mailgun awesomeness!&#39;

Updated code:

  1. var b bytes.Buffer
  2. w := multipart.NewWriter(&amp;b)
  3. fw, err := w.CreateFormField(&quot;from&quot;)
  4. if err != nil {
  5. log.Println(err)
  6. }
  7. _, err = fw.Write([]byte(&quot;Excited User &lt;excited@samples.mailgun.org&gt;&quot;))
  8. if err != nil {
  9. log.Println(err)
  10. }
  11. fw, err = w.CreateFormField(&quot;to&quot;)
  12. if err != nil {
  13. log.Println(err)
  14. }
  15. _, err = fw.Write([]byte(&quot;devs@mailgun.net&quot;))
  16. if err != nil {
  17. log.Println(err)
  18. }
  19. fw, err = w.CreateFormField(&quot;subject&quot;)
  20. if err != nil {
  21. log.Println(err)
  22. }
  23. _, err = fw.Write([]byte(&quot;Hello&quot;))
  24. if err != nil {
  25. log.Println(err)
  26. }
  27. fw, err = w.CreateFormField(&quot;text&quot;)
  28. if err != nil {
  29. log.Println(err)
  30. }
  31. _, err = fw.Write([]byte(&quot;Testing some Mailgun awesomeness!&quot;))
  32. if err != nil {
  33. log.Println(err)
  34. }
  35. w.Close()
  36. req, err := http.NewRequest(&quot;POST&quot;, &quot;https://api.mailgun.net/v3/samples.mailgun.org/messages&quot;, &amp;b)
  37. if err != nil {
  38. log.Println(err)
  39. }
  40. req.SetBasicAuth(&quot;api&quot;, &quot;key-3ax6xnjp29jd6fds4gc373sgvjxteol0&quot;)
  41. req.Header.Add(&quot;Content-Type&quot;, w.FormDataContentType())
  42. // req.Header.Add(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;)
  43. resp, err := http.DefaultClient.Do(req)
  44. if err != nil {
  45. log.Println(err)
  46. }
  47. defer resp.Body.Close()
  48. fmt.Printf(&quot;Resp: %s\n&quot;, resp)

I have of course changed api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0, https://api.mailgun.net/v3/samples.mailgun.org/messages and devs@mailgun.net to my own API and email address, but it doesn't seem to work..

Could someone please take a look to see what I might be doing wrong?

答案1

得分: 1

选项-F根据CURL文档发送一个多部分字段:

  1. -F, --form CONTENT 指定HTTP多部分POST数据 (H)

这个链接可能对你有帮助:https://stackoverflow.com/a/20397167/1786696

英文:

Option -F send a multipart field according to CURL documentation:

  1. -F, --form CONTENT Specify HTTP multipart POST data (H)

This can help you: https://stackoverflow.com/a/20397167/1786696

huangapple
  • 本文由 发表于 2017年6月26日 23:05:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/44762773.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定