V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
xinQing
V2EX  ›  Go 编程语言

requests for golang

  •  
  •   xinQing · 2019-04-21 12:15:33 +08:00 · 4350 次点击
    这是一个创建于 2043 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在学习 golang 的时候,写了一个 http 小工具,类似 python 的 requests。

    项目地址: https://github.com/xuanbo/requests

    希望大家可以多多支持,谢谢各位道友。
    24 条回复    2019-04-25 10:24:44 +08:00
    gowk
        1
    gowk  
       2019-04-21 15:37:58 +08:00
    支持一波。代码写的不错:)
    uasier
        2
    uasier  
       2019-04-21 15:52:09 +08:00 via Android
    支持
    jinliming2
        3
    jinliming2  
       2019-04-21 16:45:50 +08:00 via iPhone
    支持
    请求方法还有 PATCH HEAD OPTION 之类的建议加一下
    xinQing
        4
    xinQing  
    OP
       2019-04-21 16:52:01 +08:00
    @gowk 谢谢哈
    xinQing
        5
    xinQing  
    OP
       2019-04-21 16:53:21 +08:00
    @jinliming2 嗯嗯,谢谢建议哈。主要平时就主要用 GET、POST、PUT、DELETE ; PATCH、HEAD、OPTION 不咋用,我后面加上
    xinQing
        6
    xinQing  
    OP
       2019-04-21 16:53:35 +08:00
    @uasier 嘻嘻,3q
    kidlj
        7
    kidlj  
       2019-04-21 18:01:09 +08:00
    很干净。喜欢了。
    inframe
        8
    inframe  
       2019-04-21 18:02:03 +08:00 via Android
    终于有人造这个轮子了.(:滑稽
    newmind
        9
    newmind  
       2019-04-21 18:24:11 +08:00   ❤️ 1
    插播一个正在用的
    parnurzeal/gorequest: GoRequest -- Simplified HTTP client ( inspired by nodejs SuperAgent )
    https://github.com/parnurzeal/gorequest
    abel1989
        10
    abel1989  
       2019-04-21 20:05:39 +08:00
    写的不错。。。。
    xinQing
        11
    xinQing  
    OP
       2019-04-22 09:14:02 +08:00
    @kidlj 只用了标准库,源码也才 200 行,比较适合初学者,有问题也可以自己改~
    xinQing
        12
    xinQing  
    OP
       2019-04-22 09:14:52 +08:00
    @inframe 哈哈
    xinQing
        13
    xinQing  
    OP
       2019-04-22 09:15:16 +08:00
    @abel1989 谢谢支持: )
    xinQing
        14
    xinQing  
    OP
       2019-04-22 10:31:08 +08:00
    @newmind parnurzeal/gorequest 这给功能更强大,而且维护的人多,生产用比较放心:)
    Allianzcortex
        15
    Allianzcortex  
       2019-04-22 11:05:30 +08:00 via iPhone
    简洁漂亮
    abel1989
        16
    abel1989  
       2019-04-22 11:16:03 +08:00
    不能 push 代码上去......
    abel1989
        17
    abel1989  
       2019-04-22 11:16:55 +08:00
    // default client
    var defaultClient = Client{}

    func (c *Client) Get(url string) *Client {
    c.url = url
    c.method = http.MethodGet
    return c
    }

    func (c *Client) Post(url string) *Client {
    c.url = url
    c.method = http.MethodPost
    return c
    }

    func (c *Client) Put(url string) *Client {
    c.url = url
    c.method = http.MethodPut
    return c
    }

    func (c *Client) Delete(url string) *Client {
    c.url = url
    c.method = http.MethodDelete
    return c
    }

    // Get: http `GET` 请求
    func Get(url string) *Client {
    return defaultClient.Get(url)
    }

    // Post: http `POST` 请求
    func Post(url string) *Client {
    return defaultClient.Post(url)
    }

    // Put: http `PUT` 请求
    func Put(url string) *Client {
    return defaultClient.Put(url)
    }

    // Delete: http `DELETE` 请求
    func Delete(url string) *Client {
    return defaultClient.Delete(url)
    }
    xinQing
        18
    xinQing  
    OP
       2019-04-22 11:58:26 +08:00
    @abel1989 你要 fork 代码之后,然后提交一个 pull request,我这边再合并过去哈
    xkeyideal
        19
    xkeyideal  
       2019-04-22 13:55:15 +08:00
    这种东西等项目需要深度使用的时候,会发现目前没有一个第三方库能胜任的,还是需要自己写

    1、重试
    2、超时
    3、keep-alive

    只能说坑很多
    xinQing
        20
    xinQing  
    OP
       2019-04-22 14:19:02 +08:00
    @xkeyideal 这个有重试,超时,更完善: https://github.com/parnurzeal/gorequest
    xinQing
        21
    xinQing  
    OP
       2019-04-22 14:28:27 +08:00
    如果大家想使用超时、KeepAlive 等功能,可以自定义 Client、Transport 替换 http 包 DefaultClient、DefaultTransport。

    func customHttp() {

    client := &http.Client{
    Transport: &Transport
    Timeout: 5 * time.Second,
    }
    text, err := requests.Request("https://github.com/xuanbo", "OPTIONS", client).
    Send().
    Text()
    if err != nil {
    panic(err)
    }
    fmt.Println(text)
    }
    xkeyideal
        22
    xkeyideal  
       2019-04-22 15:06:59 +08:00
    @xinQing 这个库个人不推荐使用,issue 里有个比较严重的问题,不知道修复了没有
    insert000
        23
    insert000  
       2019-04-22 15:15:32 +08:00
    请问可以直接拿楼主的代码 嵌入到自己的项目中么?
    xinQing
        24
    xinQing  
    OP
       2019-04-25 10:24:44 +08:00
    @insert000 可以哈,没事的。如果在使用过程中有问题,希望可以反馈下,大家一起完善哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   992 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:04 · PVG 07:04 · LAX 15:04 · JFK 18:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.