本文介绍: 用golang实现一个简单的HTTP Server,可以将POST的payload中的内容打印出来。
目标:用golang实现一个简单的HTTP Server,支持指定监听端口,将收到的POST的payload中的内容打印出来
golang环境准备
- 可以参考https://blog.csdn.net/ljyfree/article/details/123810868
- 建议安装的版本最好是不低于golang-1.18
Server的实现
- 直接贴
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$
- 终端1上,运行server监听8090端口
admin@hpc-1:~/go$ ./http_rpc_server -p 8090
Server is listening on port 8090...
验证
- 使用curl在终端2上发送POST Request,payload带着map(字典)
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:~$
- 回看终端1,已经将map解析并打印出来
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进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。