【问题标题】:Converting curl -F to golang [duplicate]将 curl -F 转换为 golang [重复]
【发布时间】:2017-11-29 11:22:30
【问题描述】:

我正在尝试将用于发送电子邮件的 mailgun curl 命令转换为 golang。这是原始卷曲:

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

更新代码:

    var b bytes.Buffer
    w := multipart.NewWriter(&b)
    fw, err := w.CreateFormField("from")
    if err != nil {
        log.Println(err)
    }
    _, err = fw.Write([]byte("Excited User <excited@samples.mailgun.org>"))
    if err != nil {
        log.Println(err)
    }

    fw, err = w.CreateFormField("to")
    if err != nil {
        log.Println(err)
    }
    _, err = fw.Write([]byte("devs@mailgun.net"))
    if err != nil {
        log.Println(err)
    }

    fw, err = w.CreateFormField("subject")
    if err != nil {
        log.Println(err)
    }
    _, err = fw.Write([]byte("Hello"))
    if err != nil {
        log.Println(err)
    }

    fw, err = w.CreateFormField("text")
    if err != nil {
        log.Println(err)
    }
    _, err = fw.Write([]byte("Testing some Mailgun awesomeness!"))
    if err != nil {
        log.Println(err)
    }

    w.Close()

    req, err := http.NewRequest("POST", "https://api.mailgun.net/v3/samples.mailgun.org/messages", &b)
    if err != nil {
        log.Println(err)
    }
    req.SetBasicAuth("api", "key-3ax6xnjp29jd6fds4gc373sgvjxteol0")

    req.Header.Add("Content-Type", w.FormDataContentType())
    // req.Header.Add("Content-Type", "application/x-www-form-urlencoded")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        log.Println(err)
    }
    defer resp.Body.Close()

    fmt.Printf("Resp: %s\n", resp)

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

有人可以看看我可能做错了什么吗?

【问题讨论】:

  • 对于发送邮件(而不是学习 net/http),您可能需要 Mailgun 的 Go SDK:github.com/mailgun/mailgun-go
  • @twotwotwo 是的,谢谢,我之前看过这个包,但我觉得学习如何转换 curl 命令会很好,既因为将来使用,也因为包似乎要求不同信息

标签: go


【解决方案1】:

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

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

这可以帮助你:https://stackoverflow.com/a/20397167/1786696

【讨论】:

  • 我根据你的评论更新了代码,你能看看吗?
猜你喜欢
  • 2018-03-21
  • 2016-05-28
  • 2018-06-25
  • 2019-01-25
  • 2015-07-10
  • 2017-10-17
  • 2016-12-31
  • 2018-09-06
  • 1970-01-01
相关资源
最近更新 更多