Gout Versions Save

gout to become the Swiss Army Knife of the http client @^^@---> gout 是http client领域的瑞士军刀,小巧,强大,犀利。具体用法可看文档,如使用迷惑或者API用得不爽都可提issues

v0.3.9

4 months ago
  1. debug模块的trace信息可以输出的io.Writer里面
  2. 可以自定义content-type替换框架里面的设置 @simpleapples

v0.3.8

10 months ago

在NewWithOpt 加上WithSocks5, WithProxy, WithUnixSocket三个函数。

new with opt unix socket

gout.WithUnixSocket 为了让大家少用.UnixSocket 而设计

import (
	"github.com/guonaihong/gout"
)

func main() {
	// globalWithOpt里面包含连接池, 这是一个全局可复用的对象, 一个进程里面可能只需创建1个, 如果有多个不同的unixsocket,可以创建多个
	globalWithOpt := gout.NewWithOpt(gout.WithUnixSocket("/tmp/test.socket"))
	err := globalWithOpt.GET("url").Do()
	if err != nil {
		fmt.Printf("err = %v\n" ,err)
		return
	}
}

new with opt proxy

gout.WithProxy 为了让大家少用.SetProxy 而设计

import (
	"github.com/guonaihong/gout"
)

func main() {
	// globalWithOpt里面包含连接池, 这是一个全局可复用的对象, 一个进程里面可能只需创建1个, 如果有多个不同的proxy,可以创建多个
	globalWithOpt := gout.NewWithOpt(gout.WithProxy("http://127.0.0.1:7000"))
	err := globalWithOpt.GET("url").Do()
	if err != nil {
		fmt.Printf("err = %v\n" ,err)
		return
	}
}

new with opt socks5

gout.WithSocks5 为了让大家少用.SetSOCKS5而设计

import (
	"github.com/guonaihong/gout"
)

func main() {
	// globalWithOpt里面包含连接池, 这是一个全局可复用的对象, 一个进程里面可能只需创建1个, 如果有多个不同的socks5,可以创建多个
	globalWithOpt := gout.NewWithOpt(gout.WithSocks5("127.0.0.1:7000"))
	err := globalWithOpt.GET("url").Do()
	if err != nil {
		fmt.Printf("err = %v\n" ,err)
		return
	}
}

v0.3.7

1 year ago

来源 #361 新加SetHeaderRaw接口

与SetHeader API唯一的区别就是不修改header名. 大部分情况用SetHeader,如果有不修改header的需求再使用SetHeaderRaw。

package main

import (
    "fmt"
    "github.com/guonaihong/gout"
    "time"
)

func main() {
    err := gout.
        //设置GET请求和url,:8080/test.header是127.0.0.1:8080/test.header的简写
        GET(":8080/test.header").
        //设置debug模式
        Debug(true).
        //设置请求http header
        SetHeaderRaw(gout.H{
            "h1": "v1",
            "h2": 2,
            "h3": float32(3.14),
            "h4": 4.56,
            "h5": time.Now().Unix(),
            "h6": time.Now().UnixNano(),
            "h7": time.Now().Format("2006-01-02")}).
        Do()
    if err != nil {
        fmt.Printf("%s\n", err)
        return
    }

}

/*
> GET /test.header HTTP/1.1
> h2: 2
> h3: 3.14
> h4: 4.56
> h5: 1574081686
> h6: 1574081686471347098
> h7: 2019-11-18
> h1: v1
>


< HTTP/1.1 200 OK
< Content-Length: 0
*/

v0.3.6

1 year ago

感谢 @panxl6 (可根据编译tag选择多种json序列化库)

v0.3.5

1 year ago

url 支持模板语法bug修复

v0.3.4

1 year ago

url 支持模板语法。

package main

import (
	"github.com/guonaihong/gout"
)

type testURLTemplateCase struct {
	Host   string
}

func main() {

	url := "https://{{.Host}}"
	// 发送GET方法
	gout.GET(url, testURLTemplateCase{Host:"www.qq.com"}).Do()

	// 发送POST方法
	gout.POST(url, testURLTemplateCase{Host:"www.github.com"}).Do()

	// 发送PUT方法
	gout.PUT(url, testURLTemplateCase{Host:"www.baidu.com"}).Do()

	// 发送DELETE方法
	gout.DELETE(url, testURLTemplateCase{Host:"www.google.com"}).Do()

	// 发送PATH方法
	gout.PATCH(url, testURLTemplateCase{Host:"www.google.com"}).Do()

	// 发送HEAD方法
	gout.HEAD(url, testURLTemplateCase{Host:"www.google.com"}).Do()

	// 发送OPTIONS
	gout.OPTIONS(url, testURLTemplateCase{Host:"www.google.com"}).Do()
}

v0.3.3

1 year ago

新加SetJSONNotEscape接口,不转义json中的HTML字符

v0.3.2

1 year ago

#343 新加解码压缩数据包的接口

AutoDecodeBody()

只要Content-Encoding是deflate, br。都可以还原成压缩之前的格式。

Content-Encoding: deflate
Content-Encoding: br

v0.3.1

1 year ago

来源,#338

  1. 全局SetDebug
package main

import (
	"fmt"

	"github.com/guonaihong/gout"
)

func main() {
	gout.SetDebug(true)
	err := gout.GET(":8080/colorjson").Do()
	if err != nil {
		fmt.Printf("err is:%v\n")
	}
}
  1. 请求保存到文件里面
import (
	"github.com/guonaihong/gout"
	"github.com/guonaihong/gout/debug"
)
func main() {
	
	err := gout.POST(":8080/colorjson").
		Debug(debug.ToFile("./req.txt", false)).
		SetJSON(gout.H{"str": "foo",
			"num":   100,
			"bool":  false,
			"null":  nil,
			"array": gout.A{"foo", "bar", "baz"},
			"obj":   gout.H{"a": 1, "b": 2},
		}).Do()

	if err != nil {
		fmt.Printf("err = %v\n", err)
	}
}
  1. 请求保存到io.Writer里面, bytes.Buffer, 文件都可存放
package main

import (
	"bytes"
	"fmt"

	"github.com/guonaihong/gout"
	"github.com/guonaihong/gout/debug"
)

func main() {
	var buf bytes.Buffer
	err := gout.POST(":8080/colorjson").
		Debug(debug.ToWriter(&buf, false)).
		SetJSON(gout.H{"str": "foo",
			"num":   100,
			"bool":  false,
			"null":  nil,
			"array": gout.A{"foo", "bar", "baz"},
			"obj":   gout.H{"a": 1, "b": 2},
		}).Do()

	if err != nil {
		fmt.Printf("err = %v\n", err)
	}
	fmt.Println(buf.String())
}

v0.3.0

1 year ago

支持多个对象的绑定。

var responseStruct struct {
		Name string `json:"name"`
		Age  int    `json:"age"`
	}
	var responseStr string

	gout.GET("url").
		SetQuery(gout.H{}).
		BindJSON(&responseStruct).
		BindBody(&responseStr).
		Do()

	log.Println(responseStr)
	// do something with responseStruct ...