Post 去发邮件请求?

Post 去发邮件请求?,post,go,Post,Go,我想用Go发送POST请求,curl请求如下: curl 'http://192.168.1.50:18088/' -d '{"inputs": [{"desc":"program","ind":"14","p":"program"}]}' 我是这样做的: jobCateUrl := "http://192.168.1.50:18088/" data := url.Values{} queryMap := map[string]string{"p": "program", "ind": "1

我想用Go发送
POST
请求,curl请求如下:

curl 'http://192.168.1.50:18088/' -d '{"inputs": [{"desc":"program","ind":"14","p":"program"}]}'
我是这样做的:

jobCateUrl := "http://192.168.1.50:18088/"

data := url.Values{}
queryMap := map[string]string{"p": "program", "ind": "14", "desc": "program"}
q, _ := json.Marshal(queryMap)
data.Add("inputs", string(q))

client := &http.Client{}
r, _ := http.NewRequest("POST", jobCateUrl, strings.NewReader(data.Encode()))
r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
r.Header.Add("Content-Length", strconv.Itoa(len(data.Encode())))

resp, _ := client.Do(r)
fmt.Println(resp)
type body struct {
    Inputs []input `json:"input"`
}

type input struct {
    Desc string `json:"desc"`
    Ind  string `json:"ind"`
    P    string `json:"p"`
}

但是我失败了,出现了
500错误
,这有什么问题?

您不需要设置“内容长度”,相反,我认为您需要设置“主机”属性

请求主体不同:

在curl中,您发送
{“inputs”:[{“desc”:“program”,“ind”:“14”,“p”:“program”}]}

在go中,您发送
输入=%7B%22desc%22%3A%22program%22%2C%22ind%22%3A%2214%22%2C%22p%22%3A%22program%22%7D
该URL解码到
输入={“desc”:“program”,“ind”:“14”,“p”:“program”}

所以,你应该做的大概是这样的:

jobCateUrl := "http://192.168.1.50:18088/"

data := url.Values{}
queryMap := map[string]string{"p": "program", "ind": "14", "desc": "program"}
q, _ := json.Marshal(queryMap)
data.Add("inputs", string(q))

client := &http.Client{}
r, _ := http.NewRequest("POST", jobCateUrl, strings.NewReader(data.Encode()))
r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
r.Header.Add("Content-Length", strconv.Itoa(len(data.Encode())))

resp, _ := client.Do(r)
fmt.Println(resp)
type body struct {
    Inputs []input `json:"input"`
}

type input struct {
    Desc string `json:"desc"`
    Ind  string `json:"ind"`
    P    string `json:"p"`
}
然后创建一个
主体

b := body{
    Inputs: []input{
        {
            Desc: "program",
            Ind:  "14",
            P:    "program"},
        },
}
编码为:

q, err := json.Marshal(b)
if err != nil {
    panic(err)
}
你显然不应该惊慌失措,这只是为了演示。无论如何,一个
字符串(q)
将得到
{“input”:[{“desc”:“program”,“ind”:“14”,“p”:“program”}]}


上尝试一下你忽略了所有可能的错误,也许你应该检查它们。@mrd0ll4r你是什么意思?@mrd0ll4r我想问题出在我的请求上了data@mrd0ll4r我刚才测试检查错误,没有错误如果您从服务器获得
5xx
代码响应,则服务器遇到内部错误。正如我所看到的,服务器在本地运行,也许通过查看服务器(或服务器日志)可以告诉您有关问题的更多信息?resp,err:=http.PostForm(“,url.Values{“key”:{“Value”},id:{“123”})