request

package module
v1.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 10, 2019 License: MIT Imports: 15 Imported by: 0

README

request

go http request

使用

go get -v github.com/lhlyu/request

doc

链接

示例
func f1() {
	request.NewRequest().Get("http://www.baidu.com", nil).AssertStatus(200) // 打印状态码是否与200相等
}

func f2() {
	request.NewRequest().
		SetHeader(`token:fdhdufiwuf`).
		AddHeader("client", "android").
		AddCookieSimple("userId", "1").
		SetUrl("http://www.baidu.com").
		SetMethod(request.GET).DoHttp().AssertStatus(200)
}

func f3() {
	request.NewRequest().
		SetTimeOut(5). // 5 second
		SetBaseUrl("http://localhost:8080").
		SetUrl("/api/users"). // real url = baseUrl + Url
		DoGet().AssertStatus(200)
}

func f4() {
	request.NewRequest().
		SetProxy("http://localhost:8081").
		SetUrl("http://localhost:8080").
		DoGet().AssertStatus(200)
}

func f5() {
	request.NewRequest().
		SetUrl("http://localhost:8080").
		SetContentType(request.X_WWW_FORM_URLENCODED).
		SetData(`{"userId":1,"name":"tt"}`).
		DoHttp().AssertStatus(200)
}

func f6() {
	request.NewRequest().
		SetUrl("http://localhost:8080").
		SetData(`userId:1            // k-v 以行为一组
                    name:tt`).
		DoHttp().AssertStatus(200)
}

type A struct {
	UserId int    `json:"userId"`
	Name   string `json:"name"`
}

func f7() {
	request.NewRequest().
		SetUrl("http://localhost:8080").
		SetData(&A{1, "tt"}).
		DoHttp().AssertStatus(200)
}

func f8() {
	request.NewRequest().
		SetUrl("http://localhost:8080").
		SetData("userId=1&name=tt").
		DoPost().AssertStatus(200)
}

func f9() {
	request.NewRequest().
		SetUrl("http://localhost:8080/api/articles").
		SetDebug(true).
		AddHeader("userId",1).
		SetParam(`{"pageNum":1,"pageSize":10}`).      // 这里的参数会拼接到 url ? 后面
		DoGet().Then(func(resp *http.Response) {         // 自定义处理响应体
		if resp.StatusCode == 200{
			fmt.Println("自定义处理响应体")
			bts,_ := ioutil.ReadAll(resp.Body)
			fmt.Println(string(bts))
		}
	})
}

// 上传文件

func f10() {
	// eg1:
	request.NewRequest().
		SetUrl("http://localhost:8080/api/upload").
		SetFile(`file: E:\x.png`).
		DoPostFile().AssertStatus(200)

	// eg2:
	request.NewRequest().
		SetUrl("http://localhost:8080/api/upload").
		AddFile("file1","E:\\x1.png").       // 文件1
		AddFile("file2","E:\\x2.png").       // 文件2
		AddData("userId",1).                 // 其他参数
		DoPostFile().AssertStatus(200)
}

type Msg struct {
	Message string  `json:"message"`
	Code    int     `json:"code"`
}

func f11(){
	
	result := &Msg{}
	
	m := map[string]interface{}{
		"userId":1,
		"name":"tt",
	}
	
	request.NewRequest().
		SetUrl("http://localhost:8080").
		SetData(m).
		DoPost().
		BodyUnmarshal(result)
}

func f12(){
	resp := request.NewRequest().
		SetUrl("http://localhost:8080").
		DoGet()
	err := resp.Error()
	fmt.Println(err)
	fmt.Println(resp.GetStatus())
}

func f13(){
	resp := request.NewRequest().SetHeader(`
Accept-Encoding:gzip, deflate, br  // 这种头会自动转成  identity
X-Token:frerf3f3f3f.dfrf3f4f.4f34f3r34r3435
Connection:keep-alive
Pragma:no-cache
Accept:*/*
`).SetUrl("http://localhost:8080").SetDebug(true).DoGet()
	fmt.Println(resp.GetStatus())
	resp.Then(func(resp *http.Response) {
		bts,_ := ioutil.ReadAll(resp.Body)
		fmt.Println(string(bts))
	}).Then(func(resp *http.Response) {
		fmt.Println(resp.Cookies())
	}).AssertStatus(0)
}

func f14(){
	request.NewRequest().
		Get("http://localhost:8080/sadadasd", nil).
		OnSuccess(func(resp request.IResponse) {               // if 200 <= status < 300 then
			fmt.Println("success:",resp.GetStatus())      
		}).OnError(func(resp request.IResponse) {              // else then
			fmt.Println("error:",resp.GetStatus())
		})
}

func f15() {
	request.NewRequest().
		Get("https://www.163.com/",nil).
		OnSuccess(func(resp request.IResponse) {
			imgs := resp.BodyCompile("(https?.*\\.jpg)")
			for k, v := range imgs {
				fmt.Println(k, v)
			}
		})
}

Documentation

Index

Constants

View Source
const (
	DURATION                  = time.Second
	DEFAULT_RESPONSE_TIME_OUT = DURATION * 5 // 默认超时时间 5s
)
View Source
const (
	GET    = "GET"
	POST   = "POST"
	DELETE = "DELETE"
	PUT    = "PUT"
	HEAD   = "HEAD"
	TRACE  = "TRACE"
	OPTION = "OPTION"
)

http method

View Source
const (
	APPLICATION_JSON      = "application/json"                  //  json参数放body
	X_WWW_FORM_URLENCODED = "application/x-www-form-urlencoded" // 一般运用于表单提交 参数放body, & 拼接
	FORM_DATA             = "multipart/form-data"               // 文件上传  参数放body, 参数用分隔符 --------
)

header value

View Source
const (
	CONTENT_TYPE = "Content-Type"
)

header key

Variables

This section is empty.

Functions

This section is empty.

Types

type Cookie = http.Cookie

type IRequest

type IRequest interface {
	SetDebug(debug bool) IRequest                        // 打印日志
	SetBaseUrl(baseUrl string) IRequest                  // 这个会拼接在url前面
	SetUrl(apiUrl string) IRequest                       // 设置Url
	SetUrlf(urlFormat string, v ...interface{}) IRequest // 格式化设置Url
	SetMethod(method string) IRequest                    // 设置请求方法

	SetTimeOut(second int) IRequest   // 设置超时时间
	SetProxy(proxy string) IRequest   // 设置代理
	SetParam(v interface{}) IRequest  // 设置url参数,? 后面的参数
	SetHeader(v interface{}) IRequest // 设置头
	SetData(v interface{}) IRequest   // 设置body参数
	SetFile(v interface{}) IRequest   // 设置文件

	AddCookies(cookies ...*Cookie) IRequest           // 添加Cookie
	AddParam(k string, v interface{}) IRequest        // 添加url参数,? 后面的参数
	AddHeader(k string, v interface{}) IRequest       // 添加头部参数
	AddCookieSimple(k string, v interface{}) IRequest // 添加简单的cookie
	AddData(k string, v interface{}) IRequest         // 添加body 参数
	AddFile(field, filePath string) IRequest          // 添加文件

	SetContentType(tp string) IRequest // 设置 content-type

	SetTransport(transport *http.Transport) IRequest // 自定义transport
	SetRequest(r *http.Request) IRequest             // 自定义请求体
	SetClient(c *http.Client) IRequest               // 自定义HTTP client
	SetOption(option *Option) IRequest               // 自定义参数

	Get(apiUrl string, param interface{}) IResponse         // GET 请求
	Post(apiUrl string, data interface{}) IResponse         // POST 请求
	PostForm(apiUrl string, formData interface{}) IResponse // POST FORM 请求
	DoHttp() IResponse                                      // 发起请求
	DoPost() IResponse                                      // 发起post请求
	DoGet() IResponse                                       // 发起get请求
	DoPostForm() IResponse                                  // 发起post form请求
	DoPostFile() IResponse                                  // 发起post multipart/form-data 请求
}

func NewRequest

func NewRequest() IRequest

type IResponse

type IResponse interface {
	GetRequest() *http.Request                // 获取请求体
	GetResponse() *http.Response              // 获取响应体
	GetBody() string                          // 获取body内容
	GetStatus() int                           // 获取响应状态码
	IsStatusOk() bool                         // 响应状态码 == 200
	AssertStatus(status int)                  // 断言状态码
	BodyUnmarshal(v interface{}) error        // 数据解析
	Then(func(resp *http.Response)) IResponse // 自定义处理   response
	Error() error                             // 返回请求错误
	OnSuccess(func(resp IResponse)) IResponse // 成功回调
	OnError(func(resp IResponse)) IResponse   // 失败回调
	BodyCompile(pattern string) []string      // 正则匹配body
	Print()                                   // 打印请求和响应
}

type MSI

type MSI = map[string]interface{}

type MSS

type MSS = map[string]string

type Option

type Option struct {
	Proxy    string                 // 代理地址
	TimeOut  int                    // 超时时间 秒
	Cookie   []*Cookie              // cookies
	Param    map[string]string      // url参数, ? 后面的参数
	Header   map[string]string      // 请求头
	Data     map[string]interface{} // body 参数 json形式
	FileData map[string]string      // 文件
}

type Request

type Request struct {
	// contains filtered or unexported fields
}

func (*Request) AddCookieSimple

func (rq *Request) AddCookieSimple(k string, v interface{}) IRequest

func (*Request) AddCookies

func (rq *Request) AddCookies(cookies ...*Cookie) IRequest

func (*Request) AddData

func (rq *Request) AddData(k string, v interface{}) IRequest

func (*Request) AddFile

func (rq *Request) AddFile(field, filePath string) IRequest

func (*Request) AddHeader

func (rq *Request) AddHeader(k string, v interface{}) IRequest

func (*Request) AddParam

func (rq *Request) AddParam(k string, v interface{}) IRequest

func (*Request) DoGet

func (rq *Request) DoGet() IResponse

func (*Request) DoHttp

func (rq *Request) DoHttp() IResponse

func (*Request) DoPost

func (rq *Request) DoPost() IResponse

func (*Request) DoPostFile added in v1.2.0

func (rq *Request) DoPostFile() IResponse

func (*Request) DoPostForm

func (rq *Request) DoPostForm() IResponse

func (*Request) Get added in v1.2.0

func (rq *Request) Get(apiUrl string, param interface{}) IResponse

func (*Request) ObjToJson

func (rq *Request) ObjToJson(v interface{}) string

func (*Request) Post added in v1.2.0

func (rq *Request) Post(apiUrl string, data interface{}) IResponse

func (*Request) PostForm added in v1.2.0

func (rq *Request) PostForm(apiUrl string, formData interface{}) IResponse

func (*Request) SetBaseUrl

func (rq *Request) SetBaseUrl(baseUrl string) IRequest

func (*Request) SetClient

func (rq *Request) SetClient(c *http.Client) IRequest

func (*Request) SetContentType added in v1.2.0

func (rq *Request) SetContentType(tp string) IRequest

设置 content-type

func (*Request) SetData

func (rq *Request) SetData(v interface{}) IRequest

func (*Request) SetDebug

func (rq *Request) SetDebug(debug bool) IRequest

func (*Request) SetFile added in v1.2.0

func (rq *Request) SetFile(v interface{}) IRequest

func (*Request) SetHeader

func (rq *Request) SetHeader(v interface{}) IRequest

map | string(query | lines | json)

func (*Request) SetMethod

func (rq *Request) SetMethod(method string) IRequest

func (*Request) SetOption

func (rq *Request) SetOption(option *Option) IRequest

func (*Request) SetParam

func (rq *Request) SetParam(v interface{}) IRequest

map | string(query | lines | json)

func (*Request) SetProxy

func (rq *Request) SetProxy(proxy string) IRequest

func (*Request) SetRequest

func (rq *Request) SetRequest(r *http.Request) IRequest

func (*Request) SetTimeOut

func (rq *Request) SetTimeOut(second int) IRequest

设置超时时间,超时包括连接时间,任何重定向和读取响应正文,0表示不会超时

func (*Request) SetTransport

func (rq *Request) SetTransport(transport *http.Transport) IRequest

设置 Transport

func (*Request) SetUrl

func (rq *Request) SetUrl(apiUrl string) IRequest

func (*Request) SetUrlf

func (rq *Request) SetUrlf(urlFormat string, v ...interface{}) IRequest

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL