gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:08:03 25 4
gpt4 key购买 nike

这不是设置 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()))

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

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 请求 header 的有效值。

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)

关于go - 无法在 http 请求中设置 POST 正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57780438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com