使用基本身份验证和formvalue执行Http Post请求

使用基本身份验证和formvalue执行Http Post请求,http,go,wrapper,Http,Go,Wrapper,我正在为go中的API编写包装器。api使用基本身份验证,然后POST请求需要PostForm值。我在做这样的事情: func NewFoo(name string) string { client := &http.Client{} URL := HOST + "foo/" req, err := http.NewRequest("POST", URL, nil) v := url.Values{} v.Set("name", name)

我正在为go中的API编写包装器。api使用基本身份验证,然后POST请求需要PostForm值。我在做这样的事情:

func NewFoo(name string) string {
    client := &http.Client{}
    URL := HOST + "foo/"
    req, err := http.NewRequest("POST", URL, nil)
    v := url.Values{}
    v.Set("name", name)
    req.Form = v
    req.SetBasicAuth(EMAIL, PASSWORD)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    bodyText, err := ioutil.ReadAll(resp.Body)
    s := string(bodyText)
    return s
}
我有一个类似的GET请求,没有表单值,它可以工作。当我运行它时,它告诉我“name”值是必需的。(所以它没有得到它)

是否有任何原因导致此操作不起作用?

来自

您必须将
url.Values
传递给请求的主体

func NewFoo(name string) string {
    client := &http.Client{}
    URL := HOST + "foo/"
    v := url.Values{}
    v.Set("name", name)
    //pass the values to the request's body
    req, err := http.NewRequest("POST", URL, strings.NewReader(v.Encode()))
    req.SetBasicAuth(EMAIL, PASSWORD)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    bodyText, err := ioutil.ReadAll(resp.Body)
    s := string(bodyText)
    return s
}

好主意@collinglass,出于某种原因,我认为
url.Values
有一个
.String()
func.adding
req.Header.Add(“Content-Type”,“application/x-www-form-urlcoded”)
如果您发布表单,会有所帮助:)
func NewFoo(name string) string {
    client := &http.Client{}
    URL := HOST + "foo/"
    v := url.Values{}
    v.Set("name", name)
    //pass the values to the request's body
    req, err := http.NewRequest("POST", URL, strings.NewReader(v.Encode()))
    req.SetBasicAuth(EMAIL, PASSWORD)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    bodyText, err := ioutil.ReadAll(resp.Body)
    s := string(bodyText)
    return s
}