golang实现http服务端接收post请求

Posted tower888

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang实现http服务端接收post请求相关的知识,希望对你有一定的参考价值。

package main

import (
	"encoding/json"
	"log"
	"net/http"
	"time"
)

func main() 
	http.HandleFunc("/", sayHello)
	http.HandleFunc("/x",jsonReqRsp)
	s := &http.Server
		Addr:           ":9090",
		ReadTimeout:    10 * time.Second,
		WriteTimeout:   10 * time.Second,
		MaxHeaderBytes: 1 << 20,
	
	err := s.ListenAndServe()
	if err != nil 
		log.Fatal("listenAndServe: ", err)
	



type ReqData struct
	Opttype int `json:"opttype"`
	Data struct
		SystemName string `json:"systemName"`
		Account []string `json:"account"`
	 `json:"data"`


//curl  -H "Content-Type:application/json" -X POST  -d  '"opttype":1 ,"data":  "systemName": "systemName111", "account": ["zgx001", "ZGX00000", "ZGX00001"] ' -i  'http://127.0.0.1:9090/x'
func jsonReqRsp(w http.ResponseWriter, r *http.Request) 
	var reqdata ReqData
	// 调用json包的解析,解析请求body
	if err:=json.NewDecoder(r.Body).Decode(&reqdata); err!=nil
		r.Body.Close()
		log.Fatal(err)
	
	jsonStr, _ := json.Marshal(reqdata)
	log.Println("req json: ", string(jsonStr))
	
	// 返回json字符串给客户端
	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(reqdata)


func sayHello(w http.ResponseWriter, r *http.Request) 
	//获取post json请求转换为map
	err := r.ParseForm()
	if err != nil 
		log.Fatal("parse form error ", err)
	
	// 初始化请求变量结构
	formData := make(map[string]interface)
	// 调用json包的解析,解析请求body
	json.NewDecoder(r.Body).Decode(&formData)
	//log.Println("req form: ", formData)
	for key, value := range formData 
		log.Println("key:", key, " => value :", value)
	
	// 返回json字符串给客户端
	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(formData)

 

以上是关于golang实现http服务端接收post请求的主要内容,如果未能解决你的问题,请参考以下文章

golang原生api实现get和post

golang实现正/反向代理服务

Golang gRPC实现内网穿透

https原理通俗理解及golang实现

c# 服务端接收post过来的body内容

Golang: 接收GET和POST参数