代码拉取完成,页面将自动刷新
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)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。