首页 > 解决方案 > 如何将此 curl 调用转换为 Go?

问题描述

我有以下 curl 调用:

curl \
--request POST \
--header "Content-Type: application/x-www-form-urlencoded" \
--header "Authorization: Basic XXXX" \
--data-urlencode 'A=B' \
--data-urlencode 'C=D' \
"https://www.myexample.com/mypath?param1=foobar"

我怎样才能写出能做同样事情的 Go 代码?

到目前为止,我已经成功构建了完整的 URL 并将其发送到http.NewRequestWithContext()

u, err := url.Parse("https://www.myexample.com" + "/mypath")
if err != nil {
    return err
}
q := u.Query()
u.RawQuery = q.Encode()


http.NewRequestWithContext(myContext, http.MethodPost, u.String(), nil)
response, err := http.NewRequestWithContext(myContext, http.MethodPost, s.cfg.BaseDRAPI + oAuthPath, nil)
if err != nil {
    return err
}

但是,我不知道在哪里/如何指定标题和两个数据字段。请帮忙!

标签: gocurl

解决方案


创建请求并按如下方式发送。根据您的应用程序处理错误和响应。

    endpoint := "https://www.myexample.com/mypath?param1=foobar"
    data := url.Values{}
    data.Set("A", "B")
    data.Set("C", "D")

    //create new POST request to the url and encoded form Data
    r, err := http.NewRequest("POST", endpoint, strings.NewReader(data.Encode())) // URL-encoded payload
    if err != nil {
        log.Fatal(err)
    }

    //set headers to the request
    r.Header.Add("Content-Type", "application/x-www-form-urlencoded")  //this is a must for form data encoded request
    r.Header.Add("Authorization", "Basic XXXX")

    //send request and get the response
    client := &http.Client{}
    res, err := client.Do(r)
    if err != nil {
        //handle error
        log.Fatal(`error: `,err)
    }
    log.Println(res.Status)
    //handle response part here

推荐阅读