【问题标题】:How to translate this curl call into Go?如何将此 curl 调用转换为 Go?
【发布时间】:2021-08-06 16:06:42
【问题描述】:

我有以下 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
}

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

【问题讨论】:

  • http.NewRequestWithContext 返回请求,而不是响应。您可以在使用 http.Client.Do 方法发送请求之前将标头添加到该请求。
  • mholt.github.io/curl-to-go 是一个好的开始。

标签: go curl


【解决方案1】:

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

    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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2013-10-30
    • 2019-03-25
    • 2020-04-28
    相关资源
    最近更新 更多