goreq: 極簡單的流式golang http client

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

goreq是一個極其簡單的流式golang http client。它是我尋找類似Java OKHttp庫的golang http client庫時建立的。
最原始的代碼fork自gorequest,它實現了Node.js庫SuperAgent類似的功能。但是gorequest有一些bug沒有fix,使用者也提出了一些新的特性沒有支援。
我重構了代碼,更正了一些bug,增加了新的特性,尤其是POST BODY現在可以支援任意類型, 不再局限於json或者form字串格式。 因為改動比較大,不好提交pull requests,乾脆建立了一個新的輪子。這就是這個項目的最初目的。

比如下面調用baidu API根據IP地址擷取地理資訊的例子:

12345
headers := `{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Referer":"http://developer.baidu.com/map/index.php?title=webapi/ip-api"}`_, body, _ := goreq.New().SetHeaders(headers).Get("http://api.map.baidu.com/location/ip?ak=E4805d16520de693a3fe707cdc962045&ip=202.198.16.3&coor=bd09ll").End()

支援的HTTP METHOD

支援 GET, POST, HEAD, PUT, DELETE, PATCH 等http method,而且都想HTTP GET一樣簡單, 比如下面的HTTP PUT:

12
_, body, _ := goreq.New().Put("http://httpbin.org/put").SendRawString("hello world").End()println(body)

輸出結果:

12345678910111213141516
{  "args": {},  "data": "hello world",  "files": {},  "form": {},  "headers": {    "Accept-Encoding": "gzip",    "Content-Length": "11",    "Content-Type": "text/plain",    "Host": "httpbin.org",    "User-Agent": "Go-http-client/1.1"  },  "json": null,  "origin": "117.121.34.13",  "url": "http://httpbin.org/put"}

Request Body及Header

發送一個JSON格式的內容也很簡單, 你可以傳入一個struct, GoReq自動將它轉為一個JSON字串。

1
_, body, _ := goreq.New().Put("http://httpbin.org/put").SendMapString("name=Baymax&password=12345678").End()

注意在這種情況下(設定了body,未設定Content-Type), Content-Type為application/json
甚至你可以傳遞一個查詢字串:

1
_, body, _ := goreq.New().Put("http://httpbin.org/put").ContentType("json").SendMapString("name=Baymax&password=12345678").End()

注意在這種情況下(設定了body,未設定Content-Type), Content-Type為application/x-www-form-urlencoded。所以這裡顯示地設定為"application/json"

Proxy和逾時

可以為讀寫設定一個逾時時間:

12
_, _, err := goreq.New().Get("http://httpbin.org//delay/100").Timeout(10 * time.Second).End()println(err[0].Error())

Basic Auth

GoReq支援Basic Auth身分識別驗證:

1
_, body, _ := goreq.New().Get("http://httpbin.org/basic-auth/Baymax/12345678").SetBasicAuth("Baymax", "12345678").End()

更多的例子和文檔請查看 godoc

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.