1 Star 0 Fork 0

liming/go-study

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
send.go 1.85 KB
一键复制 编辑 原始数据 按行查看 历史
liming 提交于 2023-11-03 09:16 +08:00 . 2023.11.3
package main
import (
"flag"
"fmt"
"io/ioutil"
"net/http"
"strings"
"time"
)
var TIMEOUT = time.Second * 30
var RetryDelay = time.Second * 10
type reqArgs struct {
url string
method string
header string
body string
}
func ReqAndParse(req *http.Request) bool {
defer func() bool {
err := recover()
if err != nil {
fmt.Println("ReqAndParse error", err)
}
return false
}()
client := http.Client{}
client.Timeout = TIMEOUT
resp, err := client.Do(req)
if err != nil {
fmt.Println("request: ", req.URL, "error: ", err)
return false
}
defer resp.Body.Close()
con, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("read body error: ", err)
return false
}
fmt.Println(string(con))
if resp.StatusCode != http.StatusOK {
fmt.Println("response not ok, please check")
return false
}
return true
}
func retryReq(args reqArgs, retryCnt int) {
if args.url == "" {
fmt.Println("req params is error")
return
}
reqInfo := args.method + " " + args.url
errPrefix := reqInfo + ", err: "
for i := 0; i < retryCnt; i++ {
payload := strings.NewReader(args.body)
req, err := http.NewRequest(args.method, args.url, payload)
if err != nil {
msg := errPrefix + err.Error()
fmt.Println("new request error:", msg)
continue
}
req.Header.Add("Content-Type", "application/json")
if ReqAndParse(req) {
break
}
fmt.Println("retry req ", args.url, i+1, "times")
time.Sleep(RetryDelay)
}
}
func main() {
var url, method, header, body string
var retryCnt int
flag.StringVar(&url, "url", "", "input url")
flag.StringVar(&method, "X", "", "req method")
flag.StringVar(&header, "H", "", "req header")
flag.StringVar(&body, "d", "", "req body")
flag.IntVar(&retryCnt, "retry", 3, "req count")
flag.Parse()
args := reqArgs{
url: url,
method: method,
header: header,
body: body,
}
retryReq(args, retryCnt)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/liming0523/go-study.git
git@gitee.com:liming0523/go-study.git
liming0523
go-study
go-study
master

搜索帮助