zoukankan      html  css  js  c++  java
  • Go实现发送解析GET与POST请求

    参考链接:

    https://www.jb51.net/article/115693.htm

    https://www.jb51.net/article/60900.htm

    https://www.cnblogs.com/5bug/p/8494953.html

    1、服务器解析GET请求,返回值为文本格式

    package main
    
    import (
    	"log"
    	"net/http"
    )
    
    func checkToken(w http.ResponseWriter, r *http.Request) {
    	r.ParseForm()
    	if r.Form["token"][0] == "chending123" {
    		w.WriteHeader(http.StatusOK)
    		w.Write([]byte("验证成功!"))
    	} else {
    		w.WriteHeader(http.StatusNotFound)
    		w.Write([]byte("验证失败!"))
    	}
    }
    
    func main() {
    	http.HandleFunc("/user/check", checkToken)
    	er := http.ListenAndServe("localhost:9090", nil)
    	if er != nil {
    		log.Fatal("ListenAndServe: ", er)
    	}
    }
    

    2、返回值为json格式

    package main
    
    import (
        "log"
        "net/http"
        "encoding/json" 
    )
    
    func checkToken(w http.ResponseWriter, r *http.Request) {
        r.ParseForm()
        
        var result ResponseJson
        
        if r.Form["token"][0] == "chending123" {
            w.WriteHeader(http.StatusOK)
            result.Data = "chending"
            result.Message = "验证成功!"
        } else {
            w.WriteHeader(http.StatusNotFound)
            result.Message = "验证失败!"
        }
        
        bytes, _ := json.Marshal(result)
        w.Write(bytes)
    }
    
    func main() {
        http.HandleFunc("/user/check", checkToken)
        er := http.ListenAndServe("localhost:9090", nil)
        if er != nil {
            log.Fatal("ListenAndServe: ", er)
        }
    }
    
    type ResponseJson struct {  
        Data    string 
        Message string  
    } 

    3、解析POST请求与解析GET请求方法一致,POST格式为x-www-form-urlencoded

         默认地,表单数据会编码为 "application/x-www-form-urlencoded"

    4、GET请求样式

    http://localhost:9090/user/check?token=chending123

    http://localhost:9090/user/confirm?user=chending&pass=123456

    5、POST请求样式

    http://localhost:9090/user/confirm

    以application/json格式发送数据

    {

      “user”: "chending",

      "pass": "123456"

    }

    6、Go的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)
    }

    7、Go的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)
    }

     8、GET设置请求头

        client := &http.Client{}
        url := "http://localhost:9090/tokenconfirm"
        
        reqest, err := http.NewRequest("GET", url, nil)
    
        reqest.Header.Set("Content-Type", "application/json")
        reqest.Header.Add("AccessToken", token)
    
        if err != nil {
            panic(err)
        }   
    
        res, err := client.Do(reqest)  
        
        defer res.Body.Close()
        
        jsonStr, err := ioutil.ReadAll(res.Body)
       
        if err != nil {
            log.Fatal(err)
        }
  • 相关阅读:
    SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSAS 系列
    微软BI 之SSRS 系列
    微软BI 之SSRS 系列
    配置 SQL Server Email 发送以及 Job 的 Notification通知功能
  • 原文地址:https://www.cnblogs.com/lucifer1997/p/9448484.html
Copyright © 2011-2022 走看看