requests for golang - V2EX
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 4715 次点击
    这是一个创建于 2366 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在学习 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
    nbsp;   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     Solana     2715 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 09:48 PVG 17:48 LAX 02:48 JFK 05:48
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86