Golang網(wǎng)絡請求

說明

本文主要分為服務器和客戶端

服務器

服務器監(jiān)聽http請求類型主要常用到以下幾種方式:

  • 解析get的form表單
  • 解析post的方式解析json對象
  • 解析以表單的方式解析postform數(shù)據(jù)

解析get的form表單

func GetService(w http.ResponseWriter, r *http.Request)  {
    //解析get的form表單
    r.ParseForm()
    fmt.Println(r.Form["name"])
    fmt.Println(r.Form["sex"])
    fmt.Println(strings.Join(r.Form["name"], "-"))
    fmt.Println(strings.Join(r.Form["sex"], "-"))
    for k, v := range r.Form {
        fmt.Println(k, "=>", v, strings.Join(v, "-"))
    }
    //將數(shù)據(jù)回傳到客戶端
    fmt.Fprint(w, "It works")
}

解析post的方式解析json對象

func PostService(w http.ResponseWriter, r *http.Request){
    //讀取body
    body , err := ioutil.ReadAll(r.Body)
    if err != nil {
        fmt.Println("read fail")
        return
    }
    //解析body成string
    bodyStr := string(body)
    fmt.Println("bodyStr", bodyStr)
    //反序列化,解析body到struct
    var user User
    err1 := json.Unmarshal(body, &user)
    if err1 != nil{
        fmt.Println("unmarshal fail")
        return
    }
    fmt.Println("user", user.Name, user.Sex)
    //返回數(shù)據(jù)
    fmt.Fprint(w, "Post is works")
}

解析以表單的方式提交postform數(shù)據(jù)

func PostFormService(w http.ResponseWriter, r *http.Request) {
    //讀取body表單
    r.ParseForm()
    fmt.Println(r.Form["name"])
    fmt.Println(r.Form["sex"])
    fmt.Println(strings.Join(r.Form["name"], "-"))
    fmt.Println(strings.Join(r.Form["sex"], "-"))
    for k, v := range r.Form {
        fmt.Println(k, "=>", v, strings.Join(v, "-"))
    }
    //返回數(shù)據(jù)
    fmt.Fprint(w, "Post is works")
}

服務端用到的結(jié)構(gòu)體

type User struct {
    Name string `json:"name"`
    Sex string `json:"sex"`
}

開啟服務器的方法:

http.HandleFunc("/get", GetService)
http.HandleFunc("/post", PostService)
http.HandleFunc("/postform", PostFormService)
//監(jiān)聽端口號
if err := http.ListenAndServe("127.0.0.1:8888", nil); err != nil {
    fmt.Println("service start err")
}

客戶端

對應的客戶端請求方式有:

  • 發(fā)起Get請求
  • 發(fā)起Post請求
  • 發(fā)起PostForm請求

發(fā)起Get請求

func GetTest()  {
    //構(gòu)造url
    u, err := url.Parse("http://localhost:8888/get?")
    if err != nil {
        fmt.Println("url parse fail")
        return
    }
    q := u.Query()
    q.Set("name", "wnw")
    q.Set("sex", "wowam")
    u.RawQuery = q.Encode()
    //發(fā)起get請求
    resp, err1 := http.Get(u.String())
    if err1 != nil || resp.StatusCode != http.StatusOK{
        fmt.Println("get fail:", err1)
        return
    }
    defer resp.Body.Close()
    //讀取響應體
    body, err2 := ioutil.ReadAll(resp.Body)
    if err2 != nil {
        fmt.Println("read body fail")
        return
    }
    fmt.Println(string(body))
    //解析數(shù)據(jù)
}

發(fā)起Post請求

func PostTest()  {
    u := "http://localhost:8888/post?"
    user := MyUser{"小小王","女"}
    //序列化對象
    body, err := json.Marshal(user)
    if err != nil {
        fmt.Println("marshal fail")
        return
    }
    resp, err1 := http.Post(u, "application/x-www-form-urlencoded", strings.NewReader(string(body)))
    if err1 != nil {
        fmt.Println("post fail")
        return
    }
    //解析響應的數(shù)據(jù)
    defer resp.Body.Close()
    b, err2 := ioutil.ReadAll(resp.Body)
    if err2 != nil {
        fmt.Println("read body fail")
        return
    }
    fmt.Println(string(b))
}

發(fā)起PostForm請求

func PostFormTest()  {
    //構(gòu)造參數(shù)
    u, err := url.Parse("http://localhost:8888/postform?")
    if err != nil {
        fmt.Println("parse is fail")
        return
    }
    q := u.Query()
    q.Set("name", "大大王")
    q.Set("sex", "男")
    //發(fā)起post表單請求
    resp, err1 := http.PostForm(u.String(), q)
    if err1 != nil {
        fmt.Println("post fail")
        return
    }
    //解析響應
    defer resp.Body.Close()
    body, err2 := ioutil.ReadAll(resp.Body)
    if err2 != nil{
        fmt.Println("body fail")
        return
    }
    fmt.Println(string(body))
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拓挥,隨后出現(xiàn)的幾起案子遭贸,更是在濱河造成了極大的恐慌尊惰,老刑警劉巖业崖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡叫挟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門限煞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抹恳,“玉大人,你說我怎么就攤上這事署驻》芟祝” “怎么了健霹?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長秽荞。 經(jīng)常有香客問我骤公,道長,這世上最難降的妖魔是什么扬跋? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任阶捆,我火速辦了婚禮,結(jié)果婚禮上钦听,老公的妹妹穿的比我還像新娘洒试。我一直安慰自己,他們只是感情好朴上,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布垒棋。 她就那樣靜靜地躺著,像睡著了一般痪宰。 火紅的嫁衣襯著肌膚如雪叼架。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天衣撬,我揣著相機與錄音乖订,去河邊找鬼。 笑死具练,一個胖子當著我的面吹牛乍构,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扛点,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼哥遮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陵究?” 一聲冷哼從身側(cè)響起眠饮,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畔乙,沒想到半個月后君仆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡牲距,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年返咱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牍鞠。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咖摹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出难述,到底是詐尸還是另有隱情萤晴,我是刑警寧澤吐句,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站店读,受9級特大地震影響嗦枢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屯断,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一文虏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧殖演,春花似錦氧秘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至彼棍,卻和暖如春灭忠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背座硕。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工更舞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坎吻。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像宇葱,于是被迫代替她去往敵國和親瘦真。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理黍瞧,服務發(fā)現(xiàn)诸尽,斷路器,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫印颤、插件您机、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,093評論 4 62
  • 初中二年級的時候才開始看郭敬明,那時候每天頂著被老師發(fā)現(xiàn)的危險放在書下面看年局,喜歡溫暖明亮的立夏际看;高冷而又溫暖...
    茹也呀閱讀 161評論 0 0
  • 由于最近身體原因,無法安靜寫點東西矢否,簡書就放下了這么久仲闽。從今天重新開始撿起。 先講講昨天一天老公的經(jīng)歷吧僵朗。 ...
    柳立穩(wěn)閱讀 152評論 0 0
  • 看到和聽到的赖欣,經(jīng)常會令你們沮喪屑彻,世俗是這樣強大,強大到生不出改變它們的念頭來顶吮∩缟可是如果有機會提前了解了你們的人生...
    stillwater_63d6閱讀 130評論 0 0