无法在http请求中设置POST正文

Abhijeet Rastogi:

这不是设置POST请求正文的正确方法吗?

data := url.Values{}
data.Set("url", "https://www.google.com/")

client := http.Client{}
r, err := http.NewRequest(http.MethodPost, apiURL, strings.NewReader(data.Encode()))

下面的代码在执行时表明没有url paramPOST请求中发送。

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "strings"
)

func doAPICall() {
    // curl -XPOST -d 'url=https://www.google.com/' 'https://cleanuri.com/api/v1/shorten'
    apiURL := "https://cleanuri.com/api/v1/shorten"

    data := url.Values{}
    data.Set("url", "https://www.google.com/")

    client := http.Client{}
    r, err := http.NewRequest(http.MethodPost, apiURL, strings.NewReader(data.Encode()))
    if err != nil {
        panic(err)
    }
    resp, err := client.Do(r)
    if err != nil {
        panic(err)
    }
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(body))
}
func main() {
    doAPICall()
}

输出:-

$ go run .
{"error":"API Error: URL is empty"}
$ 
松饼上衣:

服务器期望Content-Type请求标头的有效值。

r, err := http.NewRequest(http.MethodPost, apiURL, strings.NewReader(data.Encode()))
if err != nil {
    panic(err)
}
r.Header.Set("Content-Type", "application/x-www-form-urlencoded") // <-- add this line
resp, err := client.Do(r)

该服务器还支持JSON请求正文:

r, err := http.NewRequest(http.MethodPost, apiURL, strings.NewReader(`{"url": "https://www.google.com/"}`))
if err != nil {
    panic(err)
}
r.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(r)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章