• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Go语言Web编程实现Get和Post请求发送与解析的方法详解

    本文实例讲述了Go语言Web编程实现Get和Post请求发送与解析的方法。分享给大家供大家参考,具体如下:

    这是一篇入门文章,通过一个简单的例子介绍Golang的Web编程主要用到的技术。

    文章结构包括:

    1. Client-Get 请求
    2. Client-Post 请求
    3. Server 处理 Get 和 Post 数据

    在数据的封装中,我们部分采用了json,因而本文也涉及到Golang中json的编码和解码。

    一、Client-Get

    复制代码 代码如下:
    package main
    import (
            "fmt"
            "net/url"
            "net/http"
            "io/ioutil"
            "log"
    )
    func main() {
            u, _ := url.Parse("http://localhost:9001/xiaoyue")
            q := u.Query()
            q.Set("username", "user")
            q.Set("password", "passwd")
            u.RawQuery = q.Encode()
            res, err := http.Get(u.String());
            if err != nil {
                  log.Fatal(err) return
            }
            result, err := ioutil.ReadAll(res.Body)
            res.Body.Close()
            if err != nil {
                  log.Fatal(err) return
            }
            fmt.Printf("%s", result)
    }

    二、Client-Post

    复制代码 代码如下:
    package main
    import (
            "fmt"
            "net/url"
            "net/http"
            "io/ioutil"
            "log"
            "bytes"
            "encoding/json"
    )
    type Server struct {
            ServerName string
            ServerIP   string
    }
    type Serverslice struct {
            Servers []Server
            ServersID  string
    }
    func main() {
            var s Serverslice
            var newServer Server;
            newServer.ServerName = "Guangzhou_VPN";
            newServer.ServerIP = "127.0.0.1"
            s.Servers = append(s.Servers, newServer)
            s.Servers = append(s.Servers, Server{ServerName: "Shanghai_VPN", ServerIP: "127.0.0.2"})
            s.Servers = append(s.Servers, Server{ServerName: "Beijing_VPN", ServerIP: "127.0.0.3"})
            s.ServersID = "team1"
            b, err := json.Marshal(s)
            if err != nil {
                    fmt.Println("json err:", err)
            }
            body := bytes.NewBuffer([]byte(b))
            res,err := http.Post("http://localhost:9001/xiaoyue", "application/json;charset=utf-8", body)
            if err != nil {
                    log.Fatal(err)
                    return
            }
            result, err := ioutil.ReadAll(res.Body)
            res.Body.Close()
            if err != nil {
                    log.Fatal(err)
                    return
            }
            fmt.Printf("%s", result)
    }

    三、Server

    复制代码 代码如下:
    package main
    import (
            "fmt"
            "net/http"
            "strings"
            "html"
            "io/ioutil"
            "encoding/json"
    )
    type Server struct {
            ServerName string
            ServerIP   string
    }
    type Serverslice struct {
            Servers []Server
            ServersID  string
    }
    func main() {
            http.HandleFunc("/", handler)
            http.ListenAndServe(":9001", nil)
    }
    func handler(w http.ResponseWriter, r *http.Request) {
            r.ParseForm() //解析参数,默认是不会解析的
            fmt.Fprintf(w, "Hi, I love you %s", html.EscapeString(r.URL.Path[1:]))
            if r.Method == "GET" {
                    fmt.Println("method:", r.Method) //获取请求的方法
                    fmt.Println("username", r.Form["username"])
                    fmt.Println("password", r.Form["password"])
                    for k, v := range r.Form {
                            fmt.Print("key:", k, "; ")
                            fmt.Println("val:", strings.Join(v, ""))
                    }
            } else if r.Method == "POST" {
                    result, _:= ioutil.ReadAll(r.Body)
                    r.Body.Close()
                    fmt.Printf("%s\n", result)
                    //未知类型的推荐处理方法
                    var f interface{}
                    json.Unmarshal(result, f)
                    m := f.(map[string]interface{})
                    for k, v := range m {
                            switch vv := v.(type) {
                                    case string:
                                            fmt.Println(k, "is string", vv)
                                    case int:
                                            fmt.Println(k, "is int", vv)
                                    case float64:
                                            fmt.Println(k,"is float64",vv)
                                    case []interface{}:
                                            fmt.Println(k, "is an array:")
                                            for i, u := range vv {
                                                    fmt.Println(i, u)
                                            }
                                    default:
                                            fmt.Println(k, "is of a type I don't know how to handle")
                             }
                      }
                     //结构已知,解析到结构体
                     var s Serverslice;
                     json.Unmarshal([]byte(result), s)
                     fmt.Println(s.ServersID);
                     for i:=0; ilen(s.Servers); i++ {
                             fmt.Println(s.Servers[i].ServerName)
                             fmt.Println(s.Servers[i].ServerIP)
                     }
            }
    }

    希望本文所述对大家Go语言程序设计有所帮助。

    您可能感兴趣的文章:
    • Go语言中利用http发起Get和Post请求的方法示例
    • 利用dep代替go get获取私有库的方法教程
    • Django objects.all()、objects.get()与objects.filter()之间的区别介绍
    • Go语言服务器开发实现最简单HTTP的GET与POST接口
    • $_GET[''goods_id'']+0 的使用详解
    • 利用Go语言搭建WebSocket服务端方法示例
    • go的websocket实现原理与用法详解
    • golang基于websocket实现的简易聊天室程序
    • Go语言基于Socket编写服务器端与客户端通信的实例
    • 使用Node.js和Socket.IO扩展Django的实时处理功能
    • Go get命令使用socket代理的方法
    上一篇:Go语言学习笔记之反射用法详解
    下一篇:使用go语言解析xml的实现方法(必看篇)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Go语言Web编程实现Get和Post请求发送与解析的方法详解 语言,Web,编程,实现,Get,和,