Golang Web編程的Get和Post請求發送與解析

來源:互聯網
上載者:User

標籤:golang   web   get   post   

          本文的是一篇入門文章,通過一個簡單的例子介紹Golang的Web編程主要用到的技術。

          文章結構包括:

  1. Client-Get 請求
  2. Client-Post 請求
  3. Server 處理 Get 和 Post 資料

          在資料的封裝中,我們部分採用了json,因而本文也涉及到Golang中json的編碼和解碼。


一、Client-Get


package mainimport (        "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 mainimport (        "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 mainimport (        "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; i<len(s.Servers); i++ {                         fmt.Println(s.Servers[i].ServerName)                         fmt.Println(s.Servers[i].ServerIP)                 }        } }





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.