Go HTTP GET/POST request

HTTP

超文本传输协议 (HTTP) 是一种用于分布式协作超媒体信息系统的应用协议。 HTTP 协议是万维网数据通信的基础。

 学习web,必须回http协议,万变不离其宗,http 基本请求都会有get和post方式。

获取get

HTTP GET 方法请求指定资源的表示。使用 GET 的请求应该只检索数据。

HTTP POST

HTTP POST 方法将数据发送到服务器。它通常用于上传文件或提交完整的 Web 表单。

go http

在 Go 中,我们使用 http 包来创建 GET 和 POST 请求。该包提供 HTTP 客户端和服务器实现。

go  GET 请求

以下示例在 Go 中创建一个简单的 GET 请求。

通过使用自己的账号

package main

import (

"fmt"

"io/ioutil"

"log"

"net/http"

)

func main() {

resp, err :=http.Get("https://www.jianshu.com/u/jianshuaccount")

if err !=nil {

log.Fatal(err)

}

defer resp.Body.Close()

body, err :=ioutil.ReadAll(resp.Body)

if err !=nil {

log.Fatal(err)

}

fmt.Println(string(body))

}

抓取的get的页面内容如下:

GOROOT=D:\Program Files\Go #gosetup

GOPATH=D:\Users\dev\sdk\go1.15.14 #gosetup

"D:\Program Files\Go\bin\go.exe" build -o C:\Users\Dev\AppData\Local\Temp\GoLand\___go_build_get_go.exe D:\gowork\beegoDemo\src\main\get.go #gosetup

C:\Users\Dev\AppData\Local\Temp\GoLand\___go_build_get_go.exe #gosetup

 

 

 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

 


    ADADACHAN -

 

-->

 


 

 

     

     

     

     

     

     

 

   

 

 

 

 

 

 

   


 

   

     

 

    240

   

    发简信

 

    ADADACHAN

 

 

   

 

     

     

       



  •    

          120

       

     

        跳跳蛙早上好

       

          1.看到跳跳蛙,心情就美丽 2.梦境和昨天看的电影基本一样,看来电影要多看才对,不是什么美梦,是做有故事情节的梦,有点再看一遍电影的感觉,是四维...

       

       

         

            15

           

              0

          1

         

       

     


  •    

          120

       

     

        IDE移动硬盘

       

          1.从北京幸幸苦苦背下来的移动硬盘,有3块,2个是老式硬盘,都是80g的,这个小的,应该里面有源码,需要找到旧式移动硬盘盒纸。 2.昨天的十公里...

       

       

         

            15

           

              0

          0

         

       

     

  •    

       

       


  •    

          120

       

     

        快9月,改变从头开始创新

       

          1.今天体力不支,跑10公里,结果是走了快5公里,要有好身体,首先是不可以感冒。最近感冒快一整天,吃了一点药,大家都知道,生病体能会下降的,想想...

       

       

         

            24

           

              0

          0

         

       

     


  •    

          120

       

     

        意外,程序员是农民工

       

          1.北京这个城市,程序员就是农民工,一份工作,拆分的特别细来执行,明明可以一个人干完的,不用,非的拆分一堆细细的螺丝钉来做,美其名曰是精致,其实...

       

       

           

              0.2

           

         

            21

           

              0

          1

         

       

     


  •    

          120

       

     

        一天从瑜伽开始

       

          1.一起来先喝杯水,根据昨天是否上火,和温水还是凉水,如何上火,直接来杯凉水,一杯直接喝不用分多次,如果有口疮,可以加点盐巴漱口,不喝 温水基本...

       

       

           

              0.2

           

         

            16

           

              1

          1

         

       

     


  •    

          120

       

     

        梦空间

       

          晚上喝了一点酒,不多一杯,主要是帮助睡眠,结果是适得其反,反而睡不好。 先吃个早饭,简简单单的 梦空间是什么?我就是在进行建筑,感觉在设计什么?...

       

       

           

              0.2

           

         

            29

           

              1

          1

         

       

     


  •  

        使用 Pytest 进行有效的 Python 测试

       

          使用 Pytest 进行有效的 Python 测试 测试您的代码会带来各种各样的好处。它增加了您对代码按预期运行的信心,并确保对代码的更改不会导...

       

       

           

              0.2

           

         

            15

           

              1

          1

         

       

     

  •    

       

       


  •    

          120

       

     

        简单的一天从抓bug开始

       

          1.早上起来看到一只小强 这种小强应该在北方才对,南方应该比这个更大只才对,拍完这个都没有胃口吃饭了,就当作减肥吧。 2.早起清单的一碗绿豆粥开...

       

       

           

              0.2

           

         

            14

           

              0

          1

         

       

     


  •  

        为什么要构架师?

       

          为什么要构架师? 1.企业发展的阶段,需要给出企业的构架未来的设计和发展方向定义和规划,简单讲就是国家的5年计划设计师 那么企业中的构架师,当然...

       

       

         

            14

           

              0

          0

         

       

     

     

   


     

个人介绍

 

   

Technology is endless, life is endless

   


 

 

   

 

 

 

 

 

 

   

 

   


   

   


   


 

Process finished with the exit code 0

可以看出来,里面就是我首页的内容,内容的主要id,我屏蔽了,感兴趣的同学,可以直接抓一下。

2.异步请求

package main

import (

"fmt"

"io/ioutil"

"log"

"net/http"

"regexp"

"sync"

)

func main() {

urls := []string{

"http://webcode.me",

      "https://example.com",

      "http://httpbin.org",

      "https://www.perl.org",

      "https://www.php.net",

      "https://www.python.org",

      "https://code.visualstudio.com",

      "https://clojure.org",

      "https://www.baidu.com",

  }

var wgsync.WaitGroup

  for _, u :=range urls {

wg.Add(1)

go func(urlstring) {

defer wg.Done()

content :=doReq(url)

title :=getTitle(content)

fmt.Println(title)

}(u)

}

wg.Wait()

}

func doReq(urlstring) (contentstring) {

resp, err :=http.Get(url)

defer resp.Body.Close()

body, err :=ioutil.ReadAll(resp.Body)

if err !=nil {

log.Fatal(err)

}

return string(body)

}

func getTitle(contentstring) (titlestring) {

re :=regexp.MustCompile("(.*)")

parts := re.FindStringSubmatch(content)

if len(parts) >0 {

return parts[1]

}else {

return "no title"

  }

}

我们发出多个异步 HTTP 请求。我们得到每个网页的标题标签的内容。

The Perl Programming Language - www.perl.org

My html page

httpbin.org

Clojure

Example Domain

PHP: Hypertext Preprocessor

Welcome to Python.org

Visual Studio Code - Code Editing. Redefined

百度一下,你就知道

3.带有查询参数的 GET 请求

package main

import (

"fmt"

"io/ioutil"

"log"

"net/http"

"net/url"

)

func main() {

name :="kenychen"

  occupation :="gardener"

  params :="name=" +url.QueryEscape(name) +"&" +

"occupation=" +url.QueryEscape(occupation)

path :=fmt.Sprintf("https://httpbin.org/get?%s", params)

resp, err :=http.Get(path)

if err !=nil {

log.Fatal(err)

}

defer resp.Body.Close()

body, err :=ioutil.ReadAll(resp.Body)

if err !=nil {

log.Fatal(err)

}

fmt.Println(string(body))

}

运行结果

{

  "args": {

    "name": "kenychen",

    "occupation": "gardener"

  },

  "headers": {

    "Accept-Encoding": "gzip",

    "Host": "httpbin.org",

    "User-Agent": "Go-http-client/2.0",

    "X-Amzn-Trace-Id": "Root=1-6123339d-1c30bc7a15b0f90200337e4a"

  },

  "origin": "20.44.231.34",

  "url": "https://httpbin.org/get?name=kenychen&occupation=gardener"

}

Go HTTP POST 请求 FORM 数据

package main

import (

"encoding/json"

"fmt"

"log"

"net/http"

"net/url"

)

func main() {

data :=url.Values{

"name":      {"kenychen"},

      "occupation": {"gardener"},

  }

resp, err :=http.PostForm("https://httpbin.org/post", data)

if err !=nil {

log.Fatal(err)

}

var resmap[string]interface{}

json.NewDecoder(resp.Body).Decode(&res)

fmt.Println(res["form"])

}

运行效果:

"D:\Program Files\Go\bin\go.exe" build -o C:\Users\Dev\AppData\Local\Temp\GoLand\___go_build_post_req_form_go.exe D:\gowork\beegoDemo\src\main\post_req_form.go #gosetup

C:\Users\Dev\AppData\Local\Temp\GoLand\___go_build_post_req_form_go.exe #gosetup

map[name:kenychen occupation:gardener]

Go HTTP POST request JSON data

import (

    "bytes"

    "encoding/json"

    "fmt"

    "log"

    "net/http"

)

func main() {

    values := map[string]string{"name": "kenychen", "occupation": "gardener"}

    json_data, err := json.Marshal(values)

    if err != nil {

        log.Fatal(err)

    }

    resp, err := http.Post("https://httpbin.org/post", "application/json",

        bytes.NewBuffer(json_data))

    if err != nil {

        log.Fatal(err)

    }

    var res map[string]interface{}

    json.NewDecoder(resp.Body).Decode(&res)

    fmt.Println(res["json"])

}


你可能感兴趣的:(Go HTTP GET/POST request)