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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM