http包发送post请求,调用jenkins接口,返回400状态码(this page expects a form submission)

go 1.19.1,windows/amd64

1. 运行环境

go 1.19.1
windows/amd64

2. 问题描述?

通过http提供的PostForm,NewRequest,Post方法发送post请求,调用jenkins pipeline的input输入处理接口,始终调用无法成功,返回结果状态码为400,消息体提示this page expects a form submission。同样的参数和URI通过curl命令,接口可以正常调用并返回200状态码

CURL命令(调用结果,返回状态码正常)

curl -s -w “%{http_code}\n” -X POST ‘88cd35a7db9b614818be840370d1cef3@172.16.99.11:8080/job/dwglptyq/job/sc-cpjob/23/wfapi/inputSubmit?inputId=Inputap'"">http://liuzhichao:88cd35a7db9b614818be840370d1cef3@172.16.99.11:8080/job/dwglptyq/job/sc-cpjob/23/wfapi/inputSubmit?inputId=Inputap' -d ‘json={“parameter”:[{“name”:”%E9%AA%8C%E8%AF%81%E7%A0%81”,”value”:”10862”}]}’

go的http包(无法调用到接口,返回错误)

func InvokRequest(httpMethod string,requestUrl string,params []map[string]string){
// func InvokRequest(httpMethod string,requestUrl string,params map[string]interface{}){
fmt.Println(“method:” + httpMethod +”,requestUrl:” + requestUrl)

// 对于http强求,获取请求参数
if httpMethod == "post" {
    urlValues := url.Values{}
    for _,m := range params {
        fmt.Println("key:" + m["name"])
        fmt.Println("value:" + m["value"])
        urlValues.Set(m["name"],m["value"])
    }

    resp, _ := http.PostForm(requestUrl,urlValues)
    // resp, _ := http.PostForm(requestUrl,url.Values{"验证码":{"123456"}})
    defer resp.Body.Close()
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}

// if httpMethod == "post" {
    // client := &http.Client{}
    // bytesData, _ := json.Marshal(params)
    // fmt.Printf("bytesData:%v\n", bytesData)
    // req, _ := http.NewRequest("POST",requestUrl,bytes.NewReader(bytesData))
    // resp, _ := client.Do(req)
    // defer resp.Body.Close()
    // body, _ := ioutil.ReadAll(resp.Body)
    // fmt.Println(string(body))


    // resp, _ := http.Post(requestUrl, "application/json",bytes.NewReader(bytesData))
    // defer resp.Body.Close()
    // body, _ := ioutil.ReadAll(resp.Body)
    // fmt.Println(string(body))
// }

}

3. 您期望得到的结果?

正确调用jenkins接口,返回200状态码

http包发送post请求,调用jenkins接口,返回400状态码(this page expects a form submission)

4. 您实际得到的结果?

http包发送post请求,调用jenkins接口,返回400状态码(this page expects a form submission)

讨论数量: 1

问题已经得到解决。最终实现如下

//调用http请求

if httpMethod == "POST" {
    resp, err := http.PostForm(requestUrl,url.Values{"json": {`{"parameter":[{"name":"验证码","value":` + valicode +`}]}`}})
    // fmt.Printf("this urlvalues:%v\n",url.Values{"json": {`{"parameter":[{"name":"验证码","value":"` + valicode +`"}]}`}}.Encode())

    if err != nil {
        fmt.Println(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(body))
}
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!