目标:用golang实现一个简单的HTTP Server,支持指定监听端口,将收到的POST的payload中的内容打印出来
admin@hpc-1:~/go$ cat http_rpc_server.go
package main
import (
"fmt"
"log"
"flag"
"net/http"
"encoding/json"
)
// 定义一个用于接收请求的结构体
type MapPrinter struct{}
// 定义一个用于接收请求的方法
func (m *MapPrinter) PrintMap(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
var payload map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&payload)
if err != nil {
http.Error(w, "Invalid payload", http.StatusBadRequest)
return
}
fmt.Println("Received payload:")
for key, value := range payload {
fmt.Printf("%s: %vn", key, value)
}
w.WriteHeader(http.StatusOK)
w.Write([]byte("Map printed successfullyn"))
}
func main() {
//获取监听端口,默认8080
port := flag.String("p", "8080", "指定监听端口")
// 解析命令行参数
flag.Parse()
//注册abc-api路由
http.HandleFunc("/abc-api", new(MapPrinter).PrintMap)
fmt.Println("Server is listening on port %s...", *port)
log.Fatal(http.ListenAndServe(":" + *port, nil))
}
admin@hpc-1:~/go$
admin@hpc-1:~/go$ go build -o http_rpc_server http_rpc_server.go
admin@hpc-1:~/go$
admin@hpc-1:~/go$ ./http_rpc_server -p 8090
Server is listening on port 8090...
admin@hpc-1:~$ curl -vX POST -H "Content-Type: application/json" -d '{"key1":"value1", "key2":"value2"}' http://localhost:8090/abc-api
Note: Unnecessary use of -X or --request, POST is already inferred.
* Trying 127.0.0.1:8090...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8090 (#0)
> POST /abc-api HTTP/1.1
> Host: localhost:8090
> User-Agent: curl/7.68.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 34
>
* upload completely sent off: 34 out of 34 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Sun, 28 Jan 2024 00:51:25 GMT
< Content-Length: 25
< Content-Type: text/plain; charset=utf-8
<
Map printed successfully
* Connection #0 to host localhost left intact
admin@hpc-1:~$
admin@hpc-1:~/go$ ./http_rpc_server -p 8090
Server is listening on port %s... 8090
Received payload:
key1: value1
key2: value2
原文地址:https://blog.csdn.net/ljyfree/article/details/135878990
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_63699.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!