欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Golang实现requests库

程序员文章站 2022-09-09 15:13:16
Golang实现requests库 简单的封装下,方便使用,像python的requests库一样。 Github地址 "Github" 支持 、`POST PUT DELETE` 、`application/x www form urlencoded` 不支持: 使用 下面是常用的例子, 请求; ......

golang实现requests库

简单的封装下,方便使用,像python的requests库一样。

github地址

github

支持

  • getpostputdelete
  • application/jsonapplication/x-www-form-urlencoded

不支持:

  • multipart/form-data

使用

下面是常用的例子,get请求;post表单提交、json提交,保存文件等。

get

func gettext() {
    text, err := requests.get("http://127.0.0.1:8080/ping").
        params(url.values{
            "param1": {"value1"},
            "param2": {"123"},
        }).
        send().
        text()
    if err != nil {
        panic(err)
    }
    fmt.println(text)
}

get请求一般需要传递query string,如下:

get http://127.0.0.1:8080/ping?param1=value1&param2=123 http/1.1

post form

func postform() {
    text, err := requests.post("http://127.0.0.1:8080/ping").
        params(url.values{
            "param1": {"value1"},
            "param2": {"123"},
        }).
        form(url.values{
            "form1": {"value1"},
            "form2": {"123"},
        }).
        send().
        text()
    if err != nil {
        panic(err)
    }
    fmt.println(text)
}

post表单提交,需要在请求体中放入表单参数:

post http://127.0.0.1:8080/ping?param1=value1&param2=123 http/1.1
content-type: application/x-www-form-urlencoded

form1=value1&form2=123

post json

func postjson() {
    text, err := requests.post("http://127.0.0.1:8080/ping").
        params(url.values{
            "param1": {"value1"},
            "param2": {"123"},
        }).
        json(map[string]interface{}{
            "json1": "value1",
            "json2": 2,
        }).
        send().
        text()
    if err != nil {
        panic(err)
    }
    fmt.println(text)
}

post json请求需要在请求体中放入json字符串:

post http://127.0.0.1:8080/ping?param1=value1&param2=123 http/1.1
content-type: application/json

{"json1": "value1", "json2": 2}

保存文件

func save() {
    err := requests.get("https://github.com/xuanbo/requests").
        send().
        save("./requests.html")
    if err != nil {
        panic(err)
    }
}

实现思路

主要是通过golang的标准库http去发送请求,下面是伪码:

// 1.创建请求
req, err := http.newrequest(method, url, strings.newreader(body))

// 2.设置请求头
req.header

// 3.发送请求
resp, err:= http.defaultclient.do(req)

// 4.处理响应
r.resp.body

说明

just for fun!