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

Liz8202 · · 1699 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

运行环境: go 1.19.1 windows/amd64 问题描述: 通过 http 提供的 PostForm,NewRequest,Post 方法发送 post 请求,调用 jenkins pipeline 的 input 输入处理接口,始终调用无法成功,返回结果状态码为 400,消息体提示 this page expects a form submission。同样的参数和 URI 通过 curl 命令,接口可以正常调用并返回 200 状态码 CURL命令(状态码200,成功触发接口): ``` curl -s -w "%{http_code}\n" -X POST 'http://liuzhichao:88cd35a7db9b614818be840370d1cef3@172.16.99.11:8080/job/dwglptyq/job/sc-cpjob/17/wfapi/inputSubmit?inputId=Inputap' -d 'json={"Parameter":[{"Name":"验证码","Value":"16386"}]}' CURL运行结果 ``` ![image.png](https://static.golangjob.cn/230313/4c80fc491117140479698cad6556cceb.png) go相关代码(返回结果状态码为 400,消息体提示 this page expects a form submission): ``` 结构体定义:(保存参数) //接收参数的类型 type Parameter struct { Parameter []Pvalue } //参数的值 type Pvalue struct { Name string Value string } //序列化json func (p Parameter) MarshalJSON() ([]byte, error) { return json.Marshal(&struct { Parameter []Pvalue `json:"Parameter,omitempty"` }{ Parameter: p.Parameter, }) } 参数构建 fmt.Scanf("%s\n",&valiCode) parameters := Parameter{ Parameter: []Pvalue{ Pvalue{ Name: "验证码", Value: valiCode, }, }, } 调用 InvokRequest("POST","http://" + jenkinsUser + ":" + jenkinsToken + "@" + jenkinsAddr + "/job/dwglptyq/job/sc-cpjob/" + fmt.Sprintf("%v",buildNumber) + "/wfapi/inputSubmit?inputId=Inputap",parameters) 处理 func InvokRequest(httpMethod string,requestUrl string,params Parameter){ fmt.Println("method:" + httpMethod +",requestUrl:" + requestUrl) if httpMethod == "POST" { client := &http.Client{} bytesData, _ := json.Marshal(params) fmt.Printf("bytesData:%v\n", bytesData) fmt.Printf("stringvalu:%v\n", string(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)) param := bytes.NewBuffer([]byte(bytesData)) //构建http请求 client = &http.Client { } req, err := http.NewRequest(httpMethod, requestUrl, param) if err != nil { fmt.Println(err) return } //设置请求头 req.Header.Add("Content-Type", "application/x-www-form-urlencoded") //发送请求 res, err := client.Do(req) if err != nil { fmt.Println(err) return } defer res.Body.Close() //返回结果 body, err := ioutil.ReadAll(res.Body) if err != nil { fmt.Println(err) return } fmt.Println(string(body)) } } ``` go运行结果 ![image.png](https://static.golangjob.cn/230313/8b6c28b32709e7c522245201b863f53b.png)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1699 次点击  
加入收藏 微博
3 回复  |  直到 2023-03-13 19:44:45
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传