设为首页 加入收藏

TOP

Golang实现requests库
2019-05-23 14:36:07 】 浏览:76
Tags:Golang 实现 requests

Golang实现requests库

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

Github地址

Github

支持

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

不支持:

  • multipart/form-data(现已支持,2019-04-16更新)

使用

下面是常用的例子,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!

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇gin的url查询参数解析 下一篇golang channel 源码剖析

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目