Golang发送post表单请求

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

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

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "net/http"
  6. )
  7.  
  8. func main() {
  9. http.HandleFunc("/postpage",func(w http.ResponseWriter,r *http.Request) {
  10. //接受post请求,然后打印表单中key和value字段的值
  11. if r.Method == "POST" {
  12. var (
  13. key string = r.PostFormValue("key")
  14. value string = r.PostFormValue("value")
  15. )
  16. fmt.Printf("key is : %s\n",key)
  17. fmt.Printf("value is: %s\n",value)
  18. }
  19. })
  20.  
  21. err := http.ListenAndServe(":80",nil)
  22. if err != nil {
  23. fmt.Println(err.Error())
  24. return
  25. }
  26. }



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

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "net/http"
  6. "net/url"
  7. )
  8.  
  9. func main() {
  10. //这里添加post的body内容
  11. data := make(url.Values)
  12. data["key"] = []string{"this is key"}
  13. data["value"] = []string{"this is value"}
  14.  
  15. //把post表单发送给目标服务器
  16. res,err := http.PostForm("http://127.0.0.1/postpage",data)
  17. if err != nil {
  18. fmt.Println(err.Error())
  19. return
  20. }
  21. defer res.Body.Close()
  22.  
  23. fmt.Println("post send success")
  24. }


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

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "net"
  6. )
  7.  
  8. func main() {
  9. //因为post方法属于HTTP协议,HTTP协议以TCP为基础,所以先建立一个
  10. //TCP连接,通过这个TCP连接来发送我们的post请求
  11. conn,err := net.Dial("tcp","127.0.0.1:80")
  12. if err != nil {
  13. fmt.Println(err.Error())
  14. return
  15. }
  16. defer conn.Close()
  17.  
  18. //构造post请求
  19. var post string
  20. post += "POST /postpage HTTP/1.1\r\n"
  21. post += "Content-Type: application/x-www-form-urlencoded\r\n"
  22. post += "Content-Length: 37\r\n"
  23. post += "Connection: keep-alive\r\n"
  24. post += "Accept-Language: zh-CN,zh;q=0.8,en;q=0.6\r\n"
  25. post += "\r\n"
  26. post += "key=this is key&value=this is value\r\n"
  27.  
  28. if _,err := conn.Write([]byte(post)); err != nil {
  29. fmt.Println(err.Error())
  30. return
  31. }
  32. fmt.Println("post send success.")
  33. }



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





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

猜你在找的Go相关文章