Http 如何在POST请求中获取参数
我正在尝试获取POST请求中的参数,但无法获取,我的代码是:Http 如何在POST请求中获取参数,http,go,post,Http,Go,Post,我正在尝试获取POST请求中的参数,但无法获取,我的代码是: package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", hello) fmt.Printf("Starting server for testing HTTP POST...\n")
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", hello)
fmt.Printf("Starting server for testing HTTP POST...\n")
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}
func hello(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.Error(w, "404 not found.", http.StatusNotFound)
return
}
switch r.Method {
case "POST":
// Call ParseForm() to parse the raw query and update r.PostForm and r.Form.
if err := r.ParseForm(); err != nil {
fmt.Fprintf(w, "ParseForm() err: %v", err)
return
}
name := r.Form.Get("name")
age := r.Form.Get("age")
fmt.Print("This have been received:")
fmt.Print("name: ", name)
fmt.Print("age: ", age)
default:
fmt.Fprintf(w, "Sorry, only POST methods are supported.")
}
}
我在终端中提出如下邮寄请求:
curl -X POST -d '{"name":"Alex","age":"50"}' localhost:8080
然后输出是:
This have been received:name: age:
为什么不采用这些参数?我做错了什么?当您将身体作为
json
对象传递时,最好定义一个与该对象匹配的Go
结构,并将请求
身体解码到该对象
类型信息结构{
名称字符串
年龄智力
}
信息:=&info{}
如果err:=json.NewDecoder(r.Body).Decode(info);呃!=零{
Error(w,err.Error(),http.StatusInternalServerError)
返回
}
_=json.NewEncoder(w).Encode(info)
您可以找到整个工作代码
$curl-X POST-d'{“name”:“Alex”,“age”:50}'本地主机:8080
此POST
请求现在运行正常
您可以根据自己的喜好修改
Go
结构和响应对象。您需要首先执行r.ParseForm()
,它从URL解析原始查询并填充表单。在case:POST之后,在if条件中,您将发送一篇包含json数据的帖子。设置Content-Type
标题并使用json.Decode
解析go中的数据。或者您可以将curl命令更改为以urlencoded形式发布,以匹配代码期望的内容:curl-X post-d name=Alex-d age=50 localhost:8080这是否回答了您的问题?非常感谢您的任命,非常感谢!