Golang发送post表单请求

前端之家收集整理的这篇文章主要介绍了Golang发送post表单请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

先写一个可以接收post请求的服务器:

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\n",key)
			fmt.Printf("value is: %s\n",value)
		}
	})

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



然后我们使用net/http包来发送post请求:

package main

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

func main() {
	//这里添加post的body内容
	data := make(url.Values)
	data["key"] = []string{"this is key"}
	data["value"] = []string{"this is value"}

	//把post表单发送给目标服务器
	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")
}


如果你不想用现成的包,那么下面这段代码就是直接通过HTTP协议实现post请求,运行效果和上面这段代码一样:

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\r\n"
	post += "Content-Type: application/x-www-form-urlencoded\r\n"
	post += "Content-Length: 37\r\n"
	post += "Connection: keep-alive\r\n"
	post += "Accept-Language: zh-CN,zh;q=0.8,en;q=0.6\r\n"
	post += "\r\n"
	post += "key=this is key&value=this is value\r\n"

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



运行第一段代码的程序,然后运行一下第二个或第三个程序来发送post请求,运行结果如图:





@H_301_39@如果转载请注明出处:http://blog.csdn.net/gophers/article/details/22870185

猜你在找的Go相关文章