request

package module
v2.0.0 Latest Latest
Warning

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

Go to latest
Published: Apr 17, 2020 License: MIT Imports: 24 Imported by: 0

README

request

go http request

当前版本

v2.0.0

go版本

1.13+

使用
  • 设置代理

go env -w GOPROXY=https://goproxy.cn,direct

  • 下载

go get -v github.com/lhlyu/request/v2

例子
package test

import (
	"github.com/lhlyu/request/v2"
	"testing"
	"time"
)

const (
	apiUrl    = "https://api.github.com/users/lhlyu"
	picUrl    = "https://cdn.jsdelivr.net/gh/lhlyu/pb@master/b/43.jpg"
)


func TestNew(t *testing.T) {
	body := request.New().
		Debug().
		Get(apiUrl).GetBodyString()
	t.Log(body)
}

type User struct {
	Id int `json:"id"`
}

func TestSend(t *testing.T) {
	body := request.New().
		Timeout(time.Second * 10).
		Send(`{"id":123}`).
		Send(&User{1}).
		Send("id=1").
		Post("http://localhost:8080/article/%d",1).GetBodyString()
	t.Log(body)
}

func dosomething(){
	time.Sleep(time.Second)
}

// 异步请求
func TestAsynch(t *testing.T) {
	r := request.New().
		Asynch().   // 开启异步
		Get(apiUrl)

	// 可以做别的事
	dosomething()

	// 等待
	body := r.Await().GetBodyString()

	t.Log(body)
}

// 保存文件
func TestSave(t *testing.T) {
	err := request.New().
		Get(picUrl).Save("./test.jpg")
	t.Log(err)
}

// 链式调用
func TestThen(t *testing.T) {
	request.New().
		Get(apiUrl).Then(func(r request.Receiver) {
		t.Log(r.GetStatus())
	}).Then(func(r request.Receiver) {
		t.Log(r.GetBodyString())
	}).Then(func(r request.Receiver) {
		u := &User{}
		r.BodyUnmarshal(u)
		t.Log(u.Id)
		if u.Id > 100000{
			r.Stop()  // 会导致后面的操作停止
		}
	}).Then(func(r request.Receiver) {
		// 正则匹配
		vals := r.BodyCompile("\\d+")
		for _, v := range vals {
			t.Log(v)
		}
	})
}

Documentation

Index

Constants

View Source
const (
	POST    = "POST"
	GET     = "GET"
	HEAD    = "HEAD"
	PUT     = "PUT"
	DELETE  = "DELETE"
	PATCH   = "PATCH"
	OPTIONS = "OPTIONS"
)
View Source
const (
	TypeJSON       = "json"
	TypeXML        = "xml"
	TypeUrlencoded = "urlencoded"
	TypeForm       = "form"
	TypeFormData   = "form-data"
	TypeHTML       = "html"
	TypeText       = "text"
	TypeMultipart  = "multipart"
	TypeStream     = "stream"
)

Variables

View Source
var DisableTransportSwap = false
View Source
var Types = map[string]string{
	TypeJSON:       "application/json",
	TypeXML:        "application/xml",
	TypeForm:       "application/x-www-form-urlencoded",
	TypeFormData:   "application/x-www-form-urlencoded",
	TypeUrlencoded: "application/x-www-form-urlencoded",
	TypeHTML:       "text/html",
	TypeText:       "text/plain",
	TypeMultipart:  "multipart/form-data",
	TypeStream:     "application/octet-stream",
}

Functions

This section is empty.

Types

type Agent

type Agent interface {
	// 开启debug
	Debug() Agent
	// 克隆
	Clone() Agent
	// 设置超时
	Timeout(timeout time.Duration) Agent
	// 是否打印curl命令
	Curl() Agent
	// 开启异步
	Asynch() Agent
	// 每次请求前都清空Agent
	SetDoNotClearSuperAgent(enable bool) Agent
	// 设置请求头
	SetHeader(param string, value string) Agent
	// 添加请求头
	AddHeader(param string, value string) Agent
	// 设置重试: 重试次数,间隔时间,期望返回的状态码列表
	Retry(retryerCount int, retryerTime time.Duration, statusCode ...int) Agent
	// 设置auth
	SetBasicAuth(username string, password string) Agent
	// 添加cookie
	AddCookie(c *http.Cookie) Agent
	// 添加简单cookie
	AddSimpleCookie(name, val string) Agent
	// 添加cookies
	AddCookies(cookies []*http.Cookie) Agent
	// 设置请求数据类型
	Type(typeStr string) Agent
	// 设置url参数
	Query(content interface{}) Agent
	// 添加url参数
	AddParam(key string, value string) Agent
	// 传输层安全协议配置 http2
	TLSClientConfig(config *tls.Config) Agent
	// 设置代理地址
	Proxy(proxyUrl string) Agent
	// 设置重定向策略
	RedirectPolicy(policy func(req *http.Request, via []*http.Request) error) Agent
	// 发送内容,一般放在body,自动判断类型
	Send(content interface{}) Agent
	// 指定发送切片
	SendSlice(content []interface{}) Agent
	// 指定发送map
	SendMap(content interface{}) Agent
	// 指定发送struct
	SendStruct(content interface{}) Agent
	// 指定发送string
	SendString(content string) Agent
	// 发送文件,允许输入文件路径,文件流, [文件名,Field]
	SendFile(file interface{}, args ...string) Agent

	// 通用请求方法
	Http(method, targetUrl string, a ...interface{}) Receiver
	// GET请求
	Get(targetUrl string, a ...interface{}) Receiver
	// POST请求
	Post(targetUrl string, a ...interface{}) Receiver
	// HEAD请求
	Head(targetUrl string, a ...interface{}) Receiver
	// PUT请求
	Put(targetUrl string, a ...interface{}) Receiver
	// DELETE请求
	Delete(targetUrl string, a ...interface{}) Receiver
	// PATCH请求
	Patch(targetUrl string, a ...interface{}) Receiver
	// OPTIONS请求
	Options(targetUrl string, a ...interface{}) Receiver

	// 返回curl
	AsCurlCommand() (string, error)
}

请求体接口定义

func New

func New() Agent

新建

type Receiver

type Receiver interface {
	// 获取原生响应体
	GetResponse() *http.Response
	// 获取body内容
	GetBody() []byte
	// 获取body内容
	GetBodyString() string
	// body内容转对象
	BodyUnmarshal(v interface{}) error
	// 正则匹配body内容
	BodyCompile(pattern string) []string
	// 获取响应状态码,没有则返回 -1
	GetStatus() int
	// 异步等待响应结果返回
	Await() Receiver
	// 保存到文件
	Save(fl interface{}) error
	// 后续操作
	Then(fn func(r Receiver)) Receiver
	// 停止后续操作
	Stop()
	// 获取最后一个错误
	Error() error
	// 获取所有错误
	Errors() []error
}

响应接口定义

type SuperAgent

type SuperAgent struct {
	// 请求url
	Url string
	// 请求方法
	Method string
	// 请求头
	Header     http.Header
	TargetType string
	ForceType  string
	Data       map[string]interface{}
	// 优先级 大于 Data
	SliceData []interface{}
	// url参数
	QueryData url.Values
	// 文件
	FileData []SuperFile
	// 是否将send的内容反射到 queryUrl
	BounceToRawString bool

	RawString string
	Client    *http.Client
	Transport *http.Transport
	Cookies   []*http.Cookie
	Errors    []error
	BasicAuth struct{ Username, Password string }

	// 重试设置
	Retryable superAgentRetryable

	DoNotClearSuperAgent bool
	// contains filtered or unexported fields
}

------------------ 定义SuperAgent 实现 Agent 接口 ---------------------

func (*SuperAgent) AddCookie

func (s *SuperAgent) AddCookie(c *http.Cookie) Agent

func (*SuperAgent) AddCookies

func (s *SuperAgent) AddCookies(cookies []*http.Cookie) Agent

func (*SuperAgent) AddHeader

func (s *SuperAgent) AddHeader(param string, value string) Agent

func (*SuperAgent) AddParam

func (s *SuperAgent) AddParam(key string, value string) Agent

func (*SuperAgent) AddSimpleCookie

func (s *SuperAgent) AddSimpleCookie(name, val string) Agent

func (*SuperAgent) AsCurlCommand

func (s *SuperAgent) AsCurlCommand() (string, error)

func (*SuperAgent) Asynch

func (s *SuperAgent) Asynch() Agent

func (*SuperAgent) Clone

func (s *SuperAgent) Clone() Agent

func (*SuperAgent) Curl

func (s *SuperAgent) Curl() Agent

func (*SuperAgent) Debug

func (s *SuperAgent) Debug() Agent

func (*SuperAgent) Delete

func (s *SuperAgent) Delete(targetUrl string, a ...interface{}) Receiver

func (*SuperAgent) Get

func (s *SuperAgent) Get(targetUrl string, a ...interface{}) Receiver

func (*SuperAgent) Head

func (s *SuperAgent) Head(targetUrl string, a ...interface{}) Receiver

func (*SuperAgent) Http

func (s *SuperAgent) Http(method, targetUrl string, a ...interface{}) Receiver

func (*SuperAgent) Options

func (s *SuperAgent) Options(targetUrl string, a ...interface{}) Receiver

func (*SuperAgent) Patch

func (s *SuperAgent) Patch(targetUrl string, a ...interface{}) Receiver

func (*SuperAgent) Post

func (s *SuperAgent) Post(targetUrl string, a ...interface{}) Receiver

func (*SuperAgent) Proxy

func (s *SuperAgent) Proxy(proxyUrl string) Agent

func (*SuperAgent) Put

func (s *SuperAgent) Put(targetUrl string, a ...interface{}) Receiver

func (*SuperAgent) Query

func (s *SuperAgent) Query(content interface{}) Agent

func (*SuperAgent) RedirectPolicy

func (s *SuperAgent) RedirectPolicy(policy func(req *http.Request, via []*http.Request) error) Agent

重定向策略设置

func (*SuperAgent) Retry

func (s *SuperAgent) Retry(retryerCount int, retryerTime time.Duration, statusCode ...int) Agent

设置重试 重试次数,重试等待时间 期望状态码

func (*SuperAgent) Send

func (s *SuperAgent) Send(content interface{}) Agent

func (*SuperAgent) SendFile

func (s *SuperAgent) SendFile(file interface{}, args ...string) Agent

func (*SuperAgent) SendMap

func (s *SuperAgent) SendMap(content interface{}) Agent

func (*SuperAgent) SendSlice

func (s *SuperAgent) SendSlice(content []interface{}) Agent

func (*SuperAgent) SendString

func (s *SuperAgent) SendString(content string) Agent

func (*SuperAgent) SendStruct

func (s *SuperAgent) SendStruct(content interface{}) Agent

func (*SuperAgent) SetBasicAuth

func (s *SuperAgent) SetBasicAuth(username string, password string) Agent

func (*SuperAgent) SetDoNotClearSuperAgent

func (s *SuperAgent) SetDoNotClearSuperAgent(enable bool) Agent

每次请求前都清除上一次的数据

func (*SuperAgent) SetHeader

func (s *SuperAgent) SetHeader(param string, value string) Agent

func (*SuperAgent) TLSClientConfig

func (s *SuperAgent) TLSClientConfig(config *tls.Config) Agent

传输层安全协议配置 http2

func (*SuperAgent) Timeout

func (s *SuperAgent) Timeout(timeout time.Duration) Agent

func (*SuperAgent) Type

func (s *SuperAgent) Type(typeStr string) Agent

type SuperFile

type SuperFile struct {
	Filename  string
	Fieldname string
	Data      []byte
}

上传文件

type SuperReceiver

type SuperReceiver struct {
	Resp *http.Response
	Body []byte
	Errs []error
	// contains filtered or unexported fields
}

func (*SuperReceiver) Await

func (s *SuperReceiver) Await() Receiver

func (*SuperReceiver) BodyCompile

func (s *SuperReceiver) BodyCompile(pattern string) []string

func (*SuperReceiver) BodyUnmarshal

func (s *SuperReceiver) BodyUnmarshal(v interface{}) error

func (*SuperReceiver) Error

func (s *SuperReceiver) Error() error

func (*SuperReceiver) Errors

func (s *SuperReceiver) Errors() []error

func (*SuperReceiver) GetBody

func (s *SuperReceiver) GetBody() []byte

func (*SuperReceiver) GetBodyString

func (s *SuperReceiver) GetBodyString() string

func (*SuperReceiver) GetResponse

func (s *SuperReceiver) GetResponse() *http.Response

func (*SuperReceiver) GetStatus

func (r *SuperReceiver) GetStatus() int

func (*SuperReceiver) Save

func (s *SuperReceiver) Save(fl interface{}) error

保存文件

func (*SuperReceiver) Stop

func (s *SuperReceiver) Stop()

func (*SuperReceiver) Then

func (s *SuperReceiver) Then(fn func(r Receiver)) Receiver

Jump to

Keyboard shortcuts

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