1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
package main
import (
"fmt"
"net/http"
"strings"
"sync"
"time"
"github.com/imroc/req/v3" // 国人开发的强大网络请求库,有中文文档https://req.cool/zh/docs/prologue/introduction/
)
var (
errMsg ErrorMessage
client = req.C().
// 在每个请求的请求级别启用转储,仅
// 暂时将转储内容存储在内存中,因此我们可以调用
// desp.dump()在需要时获取转储内容中间件。
// EnableDumpEachRequest().
OnAfterResponse(func(client *req.Client, resp *req.Response) error { // 响应中间件
if resp.Err != nil { //当存在基本错误时忽略,例如网络错误。
return nil
}
// 将非成功响应视为错误,将原始转储内容记录在错误消息中。
if !resp.IsSuccessState() { // 状态代码不在200到299之间。
resp.Err = fmt.Errorf("bad response, raw content:\n%s", resp.Dump())
}
return nil
}). // 请求客户端统一设置参数
SetTimeout(60 * time.Second).
SetCommonHeaders(map[string]string{
"host": "12.15.5.172",
"proxy-connection": "keep-alive",
"content-length": "105",
"accept": "application/json, text/javascript, */*; q=0.01",
"origin": "https://httpbin.org",
"x-requested-with": "XMLHttpRequest",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"referer": "https://httpbin.org",
"accept-encoding": "gzip, deflate",
"accept-language": "zh-CN,zh;q=0.9",
})
)
func main(){
// 默认开启自动解码,关闭自动解码如下
// client.DisableAutoDecode()
// 设置代理
client.SetProxyURL("http://127.0.0.1:8889")
// 启用调试
client.EnableDebugLog()
// 设置cookies
cookieStr := fmt.Sprintf("cf_clearance=5v3CUcJ7MVgRn8u.Z1Gbiyso0; __Host-next-auth.csrf-token=88a2e1e11900d8fbb60c7a4aeb011a|830f6605; __Secure-next-auth.callback-url=https://chat.openai.com; _cfuvid=gXYxKWDPuZr_24800000; intercom-device-id-dgkjq2bp=b88f30WQ; _puid=user-FFb339PNbfoDI6RYvkzqkkbM:1680876948-=; __cf_bm=1IIT8Cdx=%s; intercom-session-dgkjq2bp=MWhSUGtrM3d0Rmp", jwt)
BatSetCookies(cookieStr, client)
// POST请求
onMissionPostData := map[string]string{
"caseTypeVal": "allType",
"caseName": "",
"startTime": "missionStart",
"endTime": "missionEnd",
"checkAllFlag": "0",
"status": "0",
"caseStatus": "",
}
resp, err := client.R().
EnableForceMultipart().
// 请求级别临时设置请求头,一次设置多个标题
SetHeaders(map[string]string{
"my-custom-header": "My Custom Value",
"user": "imroc",
}).
SetFormData(onMissionPostData).
Post(url)
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.String())
// GET请求
queryparam := "abc"
url := "https://httpbin.org/get"
headers := map[string]string{
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Referer": "",
"Connection": "keep-alive",
}
resp, _ := client.R().
SetQueryParams(map[string]string{
"objId": queryparam,
"objType": "1001",
}).
// 一次设置多个字段的请求头
SetHeaders(headers).
Get(url)
fmt.Println(resp.String())
}
func BatSetCookies(cookieStr string, client *req.Client) {
// 根据字符串,批量设置Cookies
cookiePairs := strings.Split(cookieStr, ";")
for _, pair := range cookiePairs {
pair = strings.TrimSpace(pair)
if len(pair) == 0 {
continue
}
parts := strings.SplitN(pair, "=", 2)
if len(parts) != 2 {
continue
}
cookie := &http.Cookie{
Name: parts[0],
Value: parts[1],
}
client.SetCommonCookies(cookie)
}
}
|