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请求