Categorygithub.com/wangyong321/gogorequest
modulepackage
1.1.7
Repository: https://github.com/wangyong321/gogorequest.git
Documentation: pkg.go.dev

# README

使用方法

安装

go get -u github.com/wangyong321/gogorequest

同步下载引擎

package main

import (
	"fmt"
	"github.com/wangyong321/gogorequest"
)

func main() {
	s := gogorequest.NewSyncEngine()
	resp := s.Visit("GET", "https://httpbin.org/get", nil, nil, 10, "", nil)
	fmt.Println(resp.Text)
}

流式并发请求

package main

import (
	"fmt"
	"github.com/wangyong321/gogorequest"
)

func main() {
	s := gogorequest.NewAsyncEngine()
	s.SetLimiter(10)
	go func() {
		for {
			s.Visit("GET", "https://httpbin.org/get", nil, nil, 5, "", nil)
		}
	}()

	for {
		resp := <-s.ChanResponses
		fmt.Println(resp.Text)
	}
}

批量并发请求

package main

import (
	"fmt"
	"github.com/wangyong321/gogorequest"
)

func main() {
	s := gogorequest.NewBatchAsyncEngine()
	targetDatas := []gogorequest.BatchAsyncEngineRequestBody{}
	// 批量生成任务
	for i := 1; i <= 5; i++ {
		var request gogorequest.BatchAsyncEngineRequestBody
		request.URL = "https://httpbin.org/get"
		request.Method = "GET"
		request.Headers = nil
		request.Body = nil
		request.Timeout = 10
		request.Proxy = ""
		request.Meta = nil
		targetDatas = append(targetDatas, request)
	}
	// 请求
	resps := s.Visit(targetDatas)
	for index, resp := range resps {
		fmt.Printf("%d. %v\n", index+1, resp.Text)
	}
}

流式下载文件

package main

import (
	"fmt"
	"github.com/wangyong321/gogorequest"
)

func main() {
	s := gogorequest.NewFileEngine()
	targetUrl := "https://ip3875670905.mobgslb.tbcache.com/fs08/2022/05/06/11/109_593a72f6ef92b3220c052a744d11dc08.apk?yingid=wdj_web&fname=%E6%A2%A6%E5%B9%BB%E8%A5%BF%E6%B8%B8&productid=2011&pos=wdj_web%2Fdetail_normal_dl%2F0&appid=6602792&packageid=100724749&apprd=6602792&iconUrl=http%3A%2F%2Fandroid-artworks.25pp.com%2Ffs08%2F2022%2F05%2F07%2F5%2F109_61dd3fd76244facbb759fb2682b0c196_con.png&pkg=com.netease.my.uc&did=d16f06fab6bce8562f398fb0899b4790&vcode=13600&md5=aa5fc49fd2f40addb899b51e772841f2&ali_redirect_domain=alissl.ucdl.pp.uc.cn&ali_redirect_ex_ftag=a2101f161c398cbf3a62935698fddb4147583998c6c0062b&ali_redirect_ex_tmining_ts=1653660871&ali_redirect_ex_tmining_expire=3600&ali_redirect_ex_hot=100"
	headers := map[string]string{
		"Upgrade-Insecure-Requests": "1",
		"User-Agent":                "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36",
		"Accept":                    "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
		"Accept-Language":           "zh-CN,zh;q=0.9",
	}
	resp := s.Visit("GET", targetUrl, headers, nil, -1, "", fmt.Sprintf("梦幻西游.pkg"))
	if resp.Error != nil {
		panic(resp.Error)
	}
	if resp.StatusCode != 200 {
		fmt.Println(resp.StatusCode)
		return
	}
	fmt.Println(resp.Text)
}

请求重试

package main

import (
	"fmt"
	"github.com/wangyong321/gogorequest"
)

func main() {
	// 最大重试次数
	maxRetryCount := 3
	s := gogorequest.NewAsyncEngine()
	go func() {
		for {
			s.Visit("GET", "https://httpbin.org/get", nil, nil, 10, "", nil)
		}
	}()
	for {
		resp := <-s.ChanResponses
		if resp.Error != nil {
			if resp.Request.RetryNumber == int64(maxRetryCount) {
				// 如果当前重试次数等于最大重试次数要求,则放弃重试
				continue
			} else {
				// 开始重试重试请求
				resp.Request.Retry()
				continue
			}
		}
		fmt.Println(resp.Text)
	}
}

开启HTTP2.0模式

package main

import (
	"fmt"
	"github.com/wangyong321/gogorequest"
)

func main() {
	s := gogorequest.NewSyncEngine()
	s.EnableHTTP2()
	resp := s.Visit("GET", "https://httpbin.org/get", nil, nil, 10, "", nil)
	fmt.Println(resp.Text)
}

挂载证书请求

package main

import (
	"fmt"
	"github.com/wangyong321/gogorequest"
	"net"
	"net/http"
	"time"
)

func main() {
	s := gogorequest.NewSyncEngine()
	pemPath := "ca.pem"
	keyPath := "ca.key"
	// 请求器配置TLS证书
	tlsConfig, err := s.ReadCrt(pemPath, keyPath)
	if err != nil {
		panic(err)
	}
	// Transport指定TLS证书
	transport := http.Transport{
		DialContext:           (&net.Dialer{}).DialContext,
		DisableKeepAlives:     false,
		MaxIdleConns:          100,              // 最大空闲连接数
		IdleConnTimeout:       60 * time.Second, // 空闲连接超时
		TLSHandshakeTimeout:   60 * time.Second, // TLS 握手超时
		ExpectContinueTimeout: 1 * time.Second,
		TLSClientConfig:       tlsConfig, // 加载TLS
	}
	// 重置请求器transport
	s.SetTransport(&transport)
	// 请求
	resp := s.Visit("GET", "https://httpbin.org/get", nil, nil, 10, "", nil)
	fmt.Println(resp.Text)
}

发送飞书消息

package main

import (
	"fmt"
	"github.com/wangyong321/gogorequest"
)

func main() {
	s := gogorequest.NewBatchAsyncEngine()                    // 任意引擎
	api := "https://open.feishu.cn/open-apis/bot/v2/hook/demo" // 飞书机器人api
	token := "demo"                                            // 飞书机器人api请求token
	msg := "本条消息由go语言测试程序发出"                                   // 需要飞书机器人发送的消息
	timeout := 10                                              // 同一条消息的发送时间间隔限制,防止暴力发送

	s.OpenFeiShuWarner(api, token, int64(timeout)) // 引擎开启飞书预警消息模块
	body, err := s.WarnerFeiShu.Send(msg)          // 发送飞书消息
	if err != nil {
		panic(err)
	}
	fmt.Println(body)
}

发送邮件消息

package main

import (
	"github.com/wangyong321/gogorequest"
)

func main() {
	s := gogorequest.NewBatchAsyncEngine()                                  // 任意引擎
	fromEmail := "[email protected]"                                              // 发送邮件的邮箱
	fromPassword := "HDIDWUWTAJUIJPMW"                                       // 发送邮件的邮箱密码
	fromSmtp := "smtp.163.com:25"                                            // 发送邮件的smtp
	timeout := 10                                                            // 同一内容邮件的发送时间间隔限制,防止暴力发送
	s.OpenEmailWarner(fromEmail, fromPassword, fromSmtp, int64(timeout))     // 引擎开启邮件预警消息模块
	err := s.WarnerEmail.Send("[email protected]", "ceshi youjian", "自动测试邮件", "") // 发送普通文本
	//err := s.WarnerEmail.Send("[email protected]", "ceshi youjian", "<h1>自动测试邮件</h1>", "html") // 发送html文本
	if err != nil {
		panic(err)
	}
}

# Functions

实例化异步引擎.
实例化批量异步引擎.
实例化文件下载引擎.
实例化同步引擎.

# Structs

异步引擎.
异步引擎响应体.
异步引擎.
批量异步请求体[用户设置].
批量异步响应体.
No description provided by the author
文件下载引擎响应体.
同步引擎.
同步引擎响应体.