为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕村9548890 2023-07-17 17:12:22
这不是设置 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 param中未发送任何内容POST。package mainimport (    "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"}$ 
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

服务器期望 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)


查看完整回答
反对 回复 2023-07-17
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

你可以做这样的事情


package main


import (

    "fmt"

    "io/ioutil"

    "net/http"

    "strings"

)


func main() {


    url := "https://cleanuri.com/api/v1/shorten"


    payload := strings.NewReader("url=https://www.google.com/")


    req, err := http.NewRequest("POST", url, payload)

    if err != nil {

        fmt.Println(err)

        return

    }


    req.Header.Add("content-type", "application/x-www-form-urlencoded")

    req.Header.Add("cache-control", "no-cache")


    res, err := http.DefaultClient.Do(req)

    if err != nil {

        fmt.Println(err)

        return

    }


    defer res.Body.Close()

    body, _ := ioutil.ReadAll(res.Body)


    fmt.Println(res)

    fmt.Println(string(body))


}


查看完整回答
反对 回复 2023-07-17
  • 2 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信