Go入门笔记-24 Post数据

方式1:

package main

import (
	"fmt"
	"net/http"
	"net/url"
)

func main() {
	data := make(url.Values)
	data["key"] = []string{"this is key"}
	data["value"] = []string{"this is value"}
	res, err := http.PostForm("http://127.0.0.1/postpage", data)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	defer res.Body.Close()

	fmt.Println("post send success")
}

方式2:

package main

import (
	"fmt"
	"net"
)

func main() {
	//因为post方法属于HTTP协议,HTTP协议以TCP为基础,所以先建立一个
	//TCP连接,通过这个TCP连接来发送我们的post请求
	conn, err := net.Dial("tcp", "127.0.0.1:80")
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	defer conn.Close()

	//构造post请求
	var post string
	post += "POST /postpage HTTP/1.1
"
	post += "Content-Type: application/x-www-form-urlencoded
"
	post += "Content-Length: 37
"
	post += "Connection: keep-alive
"
	post += "Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
"
	post += "
"
	post += "key=this is key&value=this is value
"

	if _, err := conn.Write([]byte(post)); err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println("post send success.")
}

服务端:

package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/postpage", func(w http.ResponseWriter, r *http.Request) {
		//接受post请求,然后打印表单中key和value字段的值
		if r.Method == "POST" {
			var (
				key   string = r.PostFormValue("key")
				value string = r.PostFormValue("value")
			)
			fmt.Printf("key is  : %s
", key)
			fmt.Printf("value is: %s
", value)
		}
	})

	err := http.ListenAndServe(":80", nil)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
}  

以上代码转自:

http://blog.csdn.net/gophers/article/details/22870185

测试结果

不同代码编译成的大小不一样,如果考虑大小使用方式2

  

  

本博客是个人工作中记录,遇到问题可以互相探讨,没有遇到的问题可能没有时间去特意研究,勿扰。
另外建了几个QQ技术群:
2、全栈技术群:616945527,加群口令abc123
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600

闲置域名www.nsxz.com出售(等宽等高字符四字域名)。
原文地址:https://www.cnblogs.com/zhaogaojian/p/15171931.html