requests
requestsZhi Chi Yi Xia Xin Te Xing :
- Zhi Chi http2,Mo Ren Yi http2Jin Xing Lian Jie ,Lian Jie Shi Bai Hou Hui Jin Xing Tui Hua Er Jin Xing http1.1Lian Jie
- Zhi Chi JA3Zhi Wen Xiu Gai
- Zhi Chi http2+JA3Zhi Wen
- Zhi Chi Xiu Gai TLSZhi Wen
- Zhi Chi Xiu Gai http2Zhi Wen
Ci Mo Kuai Can Kao Yu PythonDe requestsMo Kuai
Jia Ru Wei Xin Qun Liao
Ru Guo Ni Xiang Gen Geng Duo Zhi Tong Dao He De Ren Yi Qi Xue Xi ,Na Yao Jia Ru Qun Liao Lai Ba !(Bei Zhu :Jia Qun )
Xia Zai requestsKu
Xia Zai Zhi Ding Ban
Kuai Su Shang Shou
Po Bu Ji Dai Liao Ma ?Ben Ye Nei Rong Wei Ru He Ru Men Requests Ti Gong Liao Hen Hao De Zhi Yin . Qi Jia She Ni Yi Jing An Zhuang Liao Requests. Ru Guo Huan Mei You ,Qu An Zhuang Kan Kan Ba .
Shou Xian ,Que Ren Yi Xia :
- RequestsYi An Zhuang
- RequestsShi Zui Xin De
Rang Wo Men Cong Yi Xie Jian Dan De Shi Li Kai Shi Ba .
DEBUGMo Shi
She Zhi Hou Quan Ju Ke Tong Yong ,Ke Yi Ba Jie Guo Da Yin Zhi stderrZhong ,Fang Bian Cha Kan url.RequestJie Gou Ti , Yuan Shi Qing Qiu , Yuan Shi Xiang Ying Nei Rong .
"github.com/wangluozhe/requests"
)
// Da Kai DebugMo Shi
requests.SetDebug(true)
// Qing Qiu Dai Ma ...
// Qu Xiao DebugMo Shi
requests.SetDebug(false)
Geng Ling Huo De Can Shu Chuan Di (Flexible Parameter Passing)
Request Jie Gou Ti Zhong De Can Shu (Params, Headers, Cookies, Data, Files, Body)Xian Zai Zhi Chi any Lei Xing . Nin Bu Zai Ju Xian Yu Te Ding De Jie Gou Ti ,Ke Yi Zhi Jie Chuan Ru map, string Huo Qi Ta Chang Jian Lei Xing ,Ku Hui Zi Dong Jin Xing Zhuan Huan .
Zhi Chi De Lei Xing Shi Li (Supported Types Examples):
-
Params (Query String):
-
*url.Params -
string(e.g. "key=value&a=1") -
map[string]string -
map[string][]string -
map[string]int -
map[string][]int -
map[string]float64 -
map[string][]float64 -
map[string]interface{}(Zhi Chi Di Gui Jie Xi ) -
Headers:
-
*http.Header -
string(e.g. "User-Agent: abc\nAccept: /") -
map[string]string -
map[string][]string -
map[string]interface{}(Zhi Zhi Chi string, int, float64, bool) -
map[string][]interface{} -
Cookies:
-
*cookiejar.Jar -
string(e.g. "name=value; a=1") -
map[string]string -
map[string]int -
map[string]float64 -
map[string]interface{}(Zhi Zhi Chi string, int, float64, bool) -
Data (Form Data):
-
*url.Values -
string(e.g. "key=value&a=1") -
map[string]string -
map[string][]string -
map[string]int -
map[string][]int -
map[string]float64 -
map[string][]float64 -
map[string]interface{}(Zhi Chi Di Gui Jie Xi ) -
Files
-
*url.Files -
map[string]string(keyWei Zi Duan Ming , valueWei Wen Jian Lu Jing . Hui Zi Dong Ti Qu Wen Jian Ming ,ContentTypeMo Ren Wei Kong ) -
Body:
-
string -
[]byte -
io.Reader
Shi Yong Shi Li (Usage):
req := &url.Request{
// Zhi Jie Shi Yong map Chuan Di Cha Xun Can Shu
Params: map[string]string{
"page": "1",
"size": "20",
},
// Zhi Jie Shi Yong map Chuan Di Header
Headers: map[string]string{
"Authorization": "Bearer token123",
},
// Zhi Jie Chuan Di Zi Fu Chuan Body
Body: "raw body content",
}
Fa Song Qing Qiu
Shi Yong requests Fa Song Wang Luo Qing Qiu Fei Chang Jian Dan .
Yi Kai Shi Yao Dao Ru requests Mo Kuai :
"github.com/wangluozhe/requests"
"github.com/wangluozhe/requests/url"
)
Ran Hou ,Chang Shi Huo Qu Mou Ge Wang Ye . Ben Li Zi Zhong ,Wo Men Lai Huo Qu Github De Gong Gong Shi Jian Xian :
Xian Zai ,Wo Men You Yi Ge Ming Wei r De Response Dui Xiang . Wo Men Ke Yi Cong Zhe Ge Dui Xiang Zhong Huo Qu Suo You Wo Men Xiang Yao De Xin Xi .
Requests Jian Bian De API Yi Wei Zhao Suo You HTTP Qing Qiu Lei Xing Du Shi Xian Er Yi Jian De . Li Ru ,Ni Ke Yi Zhe Yang Fa Song Yi Ge HTTP POST Qing Qiu :
data.Set("key","value")
r, err := requests.Post("http://httpbin.org/post", &url.Request{Data: data})
Piao Liang ,Dui Ba ?Na Yao Qi Ta HTTP Qing Qiu Lei Xing :PUT,DELETE,HEAD Yi Ji OPTIONS You Shi Ru He De Ni ?Du Shi Yi Yang De Jian Dan :
data.Set("key","value")
r, err := requests.Post("http://httpbin.org/post", &url.Request{Data: data})
r, err = requests.Delete("http://httpbin.org/delete")
r, err = requests.Head("http://httpbin.org/get")
r, err = requests.Options("http://httpbin.org/get")
Du Hen Bu Cuo Ba ,Dan Zhe Ye Jin Shi requests De Bing Shan Yi Jiao Ni .
She Zhi Dai Li
requestsShe Zhi Dai Li Ye Fei Chang Jian Dan ,Zhi Xu Gei req.ProxiesChuan Ru Dai Li ipJi Ke .
req.Proxies = "http://127.0.0.1:32768"
// She Zhi Dai Zhang Hao Mi Ma De Dai Li :req.Proxies = "http://username:password@ip:port"
r, err := requests.Get("https://api.github.com/events", req)
Chuan Di URL Can Shu
Ni Ye Xu Jing Chang Xiang Wei URL De Cha Xun Zi Fu Chuan (query string)Chuan Di Mou Chong Shu Ju . Ru Guo Ni Shi Shou Gong Gou Jian URL,Na Yao Shu Ju Hui Yi Jian /Zhi Dui De Xing Shi Zhi Yu URL Zhong ,Gen Zai Yi Ge Wen Hao De Hou Mian . Li Ru , httpbin.org/get?key=val. Requests Yun Xu Ni Shi Yong params Guan Jian Zi Can Shu ,Yi Yi Ge Zi Fu Chuan Zi Dian Lai Ti Gong Zhe Xie Can Shu . Ju Li Lai Shuo ,Ru Guo Ni Xiang Chuan Di key1=value1 He key2=value2 Dao httpbin.org/get ,Na Yao Ni Ke Yi Shi Yong Ru Xia Dai Ma :
params.Set("key1","value1")
params.Set("key2","value2")
r, err := requests.Get("http://httpbin.org/get",&url.Request{Params: params})
if err != nil {
fmt.Println(err)
}
Huo Zhe :
req := url.NewRequest()
//params := map[string]string{
// "page": "1",
// "limit": "20",
// "skip": "5",
//}
//params := map[string]int{
// "page": 1,
// "limit": 20,
// "skip": 5,
//}
//params := map[string][]string{
// "page": []string{"1", "2"},
// "limit": []string{"20"},
// "skip": []string{"5"},
//}
//params := map[string][]int{
// "page": []int{1, 2},
// "limit": []int{20},
// "skip": []int{5},
//}
params := map[string]interface{}{
"page": []interface{}{"1", 2},
"limit": []string{"20"},
"skip": []int{5},
}
req.Params = url.ParseParams(params)
r, err := requests.Get("https://httpbin.org/get", req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
Huo Zhe :
r, err := requests.Get("http://httpbin.org/get",&url.Request{Params: params})
if err != nil {
fmt.Println(err)
}
Tong Guo Da Yin Shu Chu Gai URL,Ni Neng Kan Dao URL Yi Bei Zheng Que Bian Ma :
http://httpbin.org/get?key1=value1&key2=value2
Ni Huan Ke Yi Shi ParamsYou Duo Ge Zhi Chuan Ru :
params.Set("key1","value1")
params.Add("key1","value2")
params.Set("key2","value2")
r, err := requests.Get("http://httpbin.org/get",&url.Request{Params: params})
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Url)
http://httpbin.org/post?key1=value1&key1=value2&key2=value2
Xiang Ying Nei Rong
Wo Men Neng Du Qu Fu Wu Qi Xiang Ying De Nei Rong . Zai Ci Yi GitHub Shi Jian Xian Wei Li :
import (
"fmt"
"github.com/wangluozhe/requests"
)
func main() {
r, err := requests.Get("https://api.github.com/events", nil)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
}
[{"repository":{"open_issues":0, "url":"https://github.com/...
requests Hui Zi Dong Jie Ma Lai Zi Fu Wu Qi De Nei Rong . Da Duo Shu unicode Zi Fu Ji Du Neng Bei Wu Feng Di Jie Ma .
Er Jin Zhi Xiang Ying Nei Rong
Ni Ye Neng Yi Zi Jie Shu Zu De Fang Shi Fang Wen Qing Qiu Xiang Ying Ti ,Dui Yu Fei Wen Ben Qing Qiu :
[91 123 34 105 100 34 58 34 50 48 55 49 52 50 51 57 56 48 53 34 44 34 116 121 112 101 34 58 34...
Requests Hui Zi Dong Wei Ni Jie Ma gzip He deflate Yi Ji brChuan Shu Bian Ma De Xiang Ying Shu Ju .
Li Ru ,Yi Qing Qiu Fan Hui De Er Jin Zhi Shu Ju Chuang Jian Yi Zhang Tu Pian ,Ni Ke Yi Shi Yong Ru Xia Dai Ma :
import "github.com/wangluozhe/requests"
func main(){
r, err := requests.Get("Tu Pian URL", nil)
if err != nil {
fmt.Println(err)
}
jpg,_ := os.Create("1.jpg")
io.Copy(jpg,r.Body) // Di Yi Chong
//jpg.Write(resp.Content) // Di Er Chong
}
StreamMo Shi (Liu Shi Qing Qiu )
Mo Ren Qing Kuang Xia ,requests Hui Li Ji Xia Zai Xiang Ying Ti Bing Jiang Qi Quan Bu Jia Zai Dao Nei Cun Zhong (r.Content). Ru Guo Ni Zheng Zai Qing Qiu Yi Ge Fei Chang Da De Wen Jian (Li Ru ISO Jing Xiang , Shi Pin Da Wen Jian ),Zhe Ke Neng Hui Dao Zhi Nei Cun Xiao Hao Guo Gao .
Tong Guo She Zhi Stream: true,Ni Ke Yi Tui Chi Xia Zai Xiang Ying Ti ,Zhi Dao Ni Zhu Dong Du Qu r.Body. Ci Shi r.Content Wei Kong .
Zhu Yi :Zai Stream Mo Shi Xia ,Ni Xu Yao Shou Dong Chu Li r.Body De Du Qu He Guan Bi .
import (
"fmt"
"io"
"os"
"https://github.com/wangluozhe/requests"
"https://github.com/wangluozhe/requests/url"
)
func main() {
req := url.NewRequest()
req.Stream = true // Kai Qi Stream Mo Shi
//Yi Ci Lian Jie Wei Li ,Qing Qiu Da Wen Jian
r, err := requests.Get("[https://httpbin.org/stream-bytes/10240](https://httpbin.org/stream-bytes/10240)", req)
if err != nil {
fmt.Println(err)
return
}
// Wu Bi Ji De Guan Bi Body
defer r.Body.Close()
fmt.Println("Status:", r.StatusCode)
// Chuang Jian Wen Jian Yong Yu Bao Cun
out, _ := os.Create("large_file.dat")
defer out.Close()
// Jiang Liu Shi Shu Ju Zhi Jie Kao Bei Dao Wen Jian ,Bu Zhan Yong Guo Duo Nei Cun
// Ci Shi r.Content Wei nil
n, err := io.Copy(out, r.Body)
if err != nil {
fmt.Println("Write error:", err)
}
fmt.Printf("Downloaded %d bytes", n)
}
JSON Xiang Ying Nei Rong
requests Nei Zhi Liao Jie Xi JSON De Fang Fa . Xian Zai Zhi Chi Zhi Jie Jie Xi Dao struct, map,Huo Zhe Shi Yong Kuai Jie Fang Fa Zhi Jie Huo Qu Zi Dian .
1. Jie Xi Dao Jie Gou Ti (Tui Jian )
Li Yong Go De Qiang Lei Xing Te Xing ,Ni Ke Yi Ding Yi Yi Ge Jie Gou Ti ,Zhi Jie Jiang Xiang Ying Jie Xi Jin Qu :
Type string `json:"type"`
Repo struct {
Name string `json:"name"`
} `json:"repo"`
}
var event []GithubEvent
// Chuan Ru Jie Gou Ti Zhi Zhen
err := r.Json(&event)
if err != nil {
fmt.Println("Jie Xi Shi Bai :", err)
}
fmt.Println(event[0].Repo.Name)
2. Jie Xi Dao Map
Ru Guo Ni Bu Xiang Ding Yi Jie Gou Ti ,Ke Yi Jiang Jie Guo Jie Xi Dao map Zhong :
var result map[string]interface{}
r.Json(&result)
// Fang Fa B: Shi Yong JsonMap() Kuai Jie Fang Fa
result, err := r.JsonMap()
fmt.Println(result["type"])
3. Shi Yong simplejson (Ke Xuan )
Ru Guo Ni Xi Guan Shi Yong Di San Fang Ku go-simplejson Jin Xing Lian Shi Cao Zuo ,Ke Yi Shi Yong r.SimpleJson():
// Lian Shi Huo Qu Zhi
repoName := js.GetIndex(0).Get("repo").Get("name").MustString()
fmt.Println(repoName)
Ru Guo JSON Jie Ma Shi Bai ,Jie Xi Fang Fa Hui Fan Hui Cuo Wu .
Xu Yao Zhu Yi De Shi ,Cheng Gong Diao Yong r.Json() Bing Bu Yi Wei Zhao Xiang Ying De Cheng Gong . You De Fu Wu Qi Hui Zai Shi Bai De Xiang Ying Zhong Bao Han Yi Ge JSON Dui Xiang (Bi Ru HTTP 500 De Cuo Wu Xi Jie ). Zhe Chong JSON Hui Bei Jie Ma Fan Hui . Yao Jian Cha Qing Qiu Shi Fou Cheng Gong ,Qing Jian Cha r.StatusCode Shi Fou He Ni De Qi Wang Xiang Tong .
Yuan Shi Xiang Ying Nei Rong
Zai Han Jian De Qing Kuang Xia ,Ni Ke Neng Xiang Huo Qu Lai Zi Fu Wu Qi De Yuan Shi Tao Jie Zi Xiang Ying ,Na Yao Ni Ke Yi Fang Wen r.Body. Ju Ti Ni Ke Yi Zhe Yao Zuo :
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Body)
// Fan Hui De Shi io.ReadCloserLei Xing
Dan Yi Ban Qing Kuang Xia ,Ni Ying Gai Yi Xia Mian De Mo Shi Jiang Wen Ben Liu Bao Cun Dao Wen Jian :
io.Copy(f,r.Body)
Ding Zhi Qing Qiu Tou
Ru Guo Ni Xiang Wei Qing Qiu Tian Jia HTTP Tou Bu ,Zhi Yao Jian Dan Di url.NewHeaders() Gei Headers Can Shu Jiu Ke Yi Liao .
Li Ru ,Zai Qian Yi Ge Shi Li Zhong Wo Men Mei You Zhi Ding content-type:
headers := url.NewHeaders()
headers.Set("user-agent", "my-app/0.0.1")
req := url.NewRequest()
req.Headers = headers
r, err := requests.Get(rawurl, req)
Huo Zhe
req := url.NewRequest()
req.Headers = url.ParseHeaders(map[string]interface{}{
":authority": "spidertools.cn",
":method": "GET",
":path": "/",
":scheme": "https",
"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-encoding": "gzip, deflate, br",
"accept-language": "zh-CN,zh;q=0.9",
"cache-control": "no-cache",
"cookie": "_ga=GA1.1.630251354.1645893020; Hm_lvt_def79de877408c7bd826e49b694147bc=1647245863,164793604 8,1648296630; Hm_lpvt_def79de877408c7bd826e49b694147bc=1648296630",
"pragma": "no-cache",
"sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"98\", \"Google Chrome\";v=\"98\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36",
}) // Zhu Yi :Ci Fang Shi Sheng Cheng De headersShi Wu Xu De ,Yin Wei mapShi Wu Xu De .
r, err := requests.Get(rawurl, req)
Zhu Yi : Ding Zhi header De You Xian Ji Di Yu Mou Xie Te Ding De Xin Xi Yuan ,Li Ru :
Content-LengthQing Qiu Tou Bu Neng Sui Bian She Zhi ,Ke Neng Hui You Cuo Wu Fa Sheng .- Ru Guo Bei Zhong Ding Xiang Dao Bie De Zhu Ji ,Shou Quan header Jiu Hui Bei Shan Chu .
- Dai Li Shou Quan header Hui Bei URL Zhong Ti Gong De Dai Li Shen Fen Fu Gai Diao .
- Zai Wo Men Neng Pan Duan Nei Rong Chang Du De Qing Kuang Xia ,header De Content-Length Hui Bei Gai Xie .
Geng Jin Yi Bu Jiang ,Requests Bu Hui Ji Yu Ding Zhi header De Ju Ti Qing Kuang Gai Bian Zi Ji De Xing Wei . Zhi Bu Guo Zai Zui Hou De Qing Qiu Zhong ,Suo You De header Xin Xi Du Hui Bei Chuan Di Jin Qu .
Zhu Yi : Suo You De header Zhi Bi Xu Shi string.
You Xu Qing Qiu Tou
Ru Guo Ni Xiang Rang Ni De Qing Qiu Tou Bian Wei You Xu De Hua ,Qing Tian Jia Yi Ge "Header-Order:"Can Shu Ji Ke ,Zhi Wei You Xu Qing Qiu Tou Shu Zu ,Zhu :Zhi Bi Xu Quan Bu Wei Xiao Xie .
Li Ru :
import (
"github.com/wangluozhe/requests/url"
)
func main(){
headers := url.NewHeaders()
headers.Set("Path", "/get")
headers.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36")
headers.Set("accept-language", "zh-CN,zh;q=0.9")
headers.Set("Scheme", "https")
headers.Set("accept-encoding", "gzip, deflate, br")
//headers.Set("Content-Length", "100") // Zhu Yi ,Bu Neng Sui Bian Gai Bian Content-LengthDa Xiao
headers.Set("Host", "httpbin.org")
headers.Set("Accept", "application/json, text/javascript, */*; q=0.01")
(*headers)["Header-Order:"] = []string{ // Qing Qiu Tou Pai Xu ,Zhi Bi Xu Wei Xiao Xie
"user-agent",
"path",
"accept-language",
"scheme",
"connection",
"accept-encoding",
"content-length",
"host",
"accept",
}
req.Headers = headers
r, err := requests.Get("https://httpbin.org/get", req)
if err != nil {
fmt.Println(err)
}
fmt.Println("text:", r.Text())
// Zui Hao Yong fiddlerZhua Bao Gong Ju Cha Kan Yi Xia
}
Huo Zhe :
import (
"github.com/wangluozhe/requests/url"
)
func main(){
req := url.NewRequest()
req.Headers = url.ParseHeaders(`
:authority: spidertools.cn
:method: GET
:path: /
:scheme: https // Bu Hui Bei Jia Ru Dao Tou Bu Zhong
// accept: text/html // Bu Hui Bei Jia Ru Dao Tou Bu Zhong ,Yin Wei Bei Zhu Shi Liao
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-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9
cache-control: no-cache
cookie: _ga=GA1.1.630251354.1645893020; Hm_lvt_def79de877408c7bd826e49b694147bc=1647245863,164793604 8,1648296630; Hm_lpvt_def79de877408c7bd826e49b694147bc=1648296630
pragma: no-cache
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: same-origin
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36
`) // Zhu Yi :Zhe Shi Fan Yin Hao ,Bu Shi Dan Yin Hao
r, err := requests.Get("https://httpbin.org/get", req)
if err != nil {
fmt.Println(err)
}
fmt.Println("text:", r.Text())
// Zui Hao Yong fiddlerZhua Bao Gong Ju Cha Kan Yi Xia
}
Geng Jia Fu Za De POST Qing Qiu
Tong Chang ,Ni Xiang Yao Fa Song Yi Xie Bian Ma Wei Biao Dan Xing Shi De Shu Ju ----Fei Chang Xiang Yi Ge HTML Biao Dan . Yao Shi Xian Zhe Ge ,Zhi Xu Jian Dan Di url.NewData()Gei Data Can Shu . Ni De Shu Ju Zi Dian Zai Fa Chu Qing Qiu Shi Hui Zi Dong Bian Ma Wei Biao Dan Xing Shi :
data.Set("key1","value1")
data.Set("key2","value2")
req := url.NewRequest()
req.Data = data
r, err := requests.Post("http://www.baidu.com",req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
...
"form": {
"key1": "value1",
"key2": "value2"
}
...
Huo Zhe :
// Gen url.ParseParamsTong Yi Yong Fa ,Zhi Shi Ming Cheng Bu Tong Er Yi .
// data := map[string]interface{}{
// "page": []interface{}{"1", 2},
// "limit": []string{"20"},
// "skip": []int{5},
// }
// req.Data = url.ParseData(data)
req.Data = url.ParseData("key1=value1&key2=value2")
r, err := requests.Post("http://www.baidu.com",req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
...
"form": {
"key1": "value1",
"key2": "value2"
}
...
Ni Huan Ke Yi Wei dataZai Biao Dan Zhong Duo Ge Yuan Su Shi Yong Tong Yi key De Shi Hou ,Zhe Chong Fang Shi You Qi You Xiao :
data.Set("key1","value1")
data.Add("key1","value3")
data.Set("key2","value2")
data.Add("key2","value4")
req := url.NewRequest()
req.Data = data
r, err := requests.Post("http://httpbin.org/post",req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
...
"form": {
"key1": [
"value1",
"value3"
],
"key2": [
"value2",
"value4"
]
}
...
Hen Duo Shi Hou Ni Xiang Yao Fa Song De Shu Ju Bing Fei Bian Ma Wei Biao Dan Xing Shi De . Ru Guo Ni Xiang Chuan Di Yi Ge json Shu Ju Na Yao Yong Xia Mian De Fang Fa .
Ni Ke Yi Shi Yong Json Can Shu Zhi Jie Chuan Di ,Ran Hou Ta Jiu Hui Bei Zi Dong Bian Ma (Ren He Ke Bei json.Marshal Chu Li De Lei Xing ).
import (
"fmt"
"github.com/wangluozhe/requests"
"github.com/wangluozhe/requests/url"
)
func main() {
req := url.NewRequest()
req.Json = map[string]interface{}{ // Xiu Zheng Lao Ban map[string]string
"some": "data",
"name": "Ce Shi ",
"colors": []string{"Lan Se ", "Lu Se ", "Zi Se "},
"data": map[string]interface{}{
"json": true,
"age": 15,
},
}
r, err := requests.Post("http://httpbin.org/post", req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
}
{
"args": {},
"data": "{\"colors\":[\"\u84dd\u8272\",\"\u7eff\u8272\",\"\u7d2b\u8272\"],\"data\":{\"age\":15,\"json\":true},\"name\":\"\u6d4b\u8bd5\",\"some\":\"data\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Content-Length": "99",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "golang-requests 1.0",
"X-Amzn-Trace-Id": "Root=1-6241ac54-4345fed071127ed54d2ae83b"
},
"json": {
"colors": [
"\u84dd\u8272",
"\u7eff\u8272",
"\u7d2b\u8272"
],
"data": {
"age": 15,
"json": true
},
"name": "\u6d4b\u8bd5",
"some": "data"
},
"origin": "220.249.16.210",
"url": "http://httpbin.org/post"
}
POSTYi Ge Duo Bu Fen Bian Ma (Multipart-Encoded)De Wen Jian Huo FormData
requests Shi De Shang Chuan Duo Bu Fen Bian Ma Wen Jian Bian De Hen Jian Dan :
// SetFile(name,fileName,filePath,contentType)
// nameWei Zi Duan Ming ,fileNameWei Shang Chuan De Wen Jian Ming ,filePathWei Shang Chuan Wen Jian De Jue Dui Lu Jing ,contentTypeWei Shang Chuan De Wen Jian Lei Xing
// Ru Guo contentTypeShe Zhi Wei "",Ze Mo Ren Wei "application/octet-stream"
files.SetFile("api","api","D:\\Go\\github.com\\wangluozhe\\requests\\api.go","")
req := url.NewRequest()
req.Files = files
r, err := requests.Post("http://httpbin.org/post",req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
...
"files": {
"api": "Wen Jian Nei Rong "
}
...
requestsShi De FormDataDe Shi Yong Ye Fang Bian Duo Liao :
// SetFile(name,value)
// nameWei Zi Duan Ming ,valueWei Zhi
files.SetField("name","value")
req := url.NewRequest()
req.Files = files
r, err := requests.Post("http://httpbin.org/post",req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
...
"form": {
"name": "value"
}
...
POSTFa Song text/plainWen Ben
requestsZhi Chi postChuan Shu Pu Tong Wen Ben Xin Xi ,Mo Ren content-type=text/plain,Ye Ke Yi Zi Ding Yi content-type.
import (
"fmt"
"github.com/wangluozhe/requests"
"github.com/wangluozhe/requests/url"
)
func main() {
req := url.NewRequest()
headers := url.NewHeaders()
headers.Set("User-Agent", "123")
req.Headers = headers
req.Body = "testdata"
r, _ := requests.Post("https://httpbin.org/post", req)
fmt.Println(r.Text())
}
Xiang Ying Zhuang Tai Ma
Wo Men Ke Yi Jian Ce Xiang Ying Zhuang Tai Ma :
fmt.Println(r.StatusCode)
200
Wei Fang Bian Yin Yong ,Ke Yi Zhi Jie Shi Yong Ci Fang Fa :
True
Ru Guo Fa Song Liao Yi Ge Cuo Wu Qing Qiu (Yi Ge 4XX Ke Hu Duan Cuo Wu ,Huo Zhe 5XX Fu Wu Qi Cuo Wu Xiang Ying ),Wo Men Ke Yi Tong Guo Response.RaiseForStatus() Lai Pao Chu Yi Chang :
fmt.Println(r.StatusCode)
404
fmt.Println(r.RaiseForStatus())
404 Client Error
Dan Shi ,You Yu Wo Men De Li Zi Zhong r De StatusCode Shi 200 ,Dang Wo Men Diao Yong RaiseForStatus() Shi ,De Dao De Shi :
nil
Yi Qie Du Ting He Xie Ha .
Xiang Ying Tou
Wo Men Ke Yi Cha Kan Yi Yi Ge http.HeaderXing Shi (Shi Ji Shi Yi Ge map[string][]stringLei Xing )Zhan Shi De Fu Wu Qi Xiang Ying Tou :
map[Access-Control-Allow-Credentials:[true] Access-Control-Allow-Origin:[*] Connection:[keep-alive] Content-Length:[1976] Content-Type:[application/json] Date:[Sat, 12 Mar 2022 15:59:05 GMT] Server:[gunicorn/19.9.0]]
Dan Shi Zhe Ge Lei Xing Bi Jiao Te Shu :Ta Shi Jin Wei HTTP Tou Bu Er Sheng De . Gen Ju RFC 2616, HTTP Tou Bu Shi Da Xiao Xie Bu Min Gan De .
Yin Ci ,Wo Men Ke Yi Shi Yong Ren Yi Da Xie Xing Shi Lai Fang Wen Zhe Xie Xiang Ying Tou Zi Duan :
application/json
fmt.Println(r.Headers.Get("content-type"))
application/json
Ta Huan You Yi Ge Te Shu Dian ,Na Jiu Shi Fu Wu Qi Ke Yi Duo Ci Jie Shou Tong Yi header,Mei Ci Du Shi Yong Bu Tong De Zhi . Dan Requests Hui Jiang Ta Men He Bing ,Zhe Yang Ta Men Jiu Ke Yi Yong Yi Ge Ying She Lai Biao Shi Chu Lai ,Can Jian RFC 7230:
A recipient MAY combine multiple header fields with the same field name into one "field-name: field-value" pair, without changing the semantics of the message, by appending each subsequent field value to the combined field value in order, separated by a comma.
Jie Shou Zhe Ke Yi He Bing Duo Ge Xiang Tong Ming Cheng De header Lan Wei ,Ba Ta Men He Wei Yi Ge "field-name: field-value" Pei Dui ,Jiang Mei Ge Hou Xu De Lan Wei Zhi Yi Ci Zhui Jia Dao He Bing De Lan Wei Zhi Zhong ,Yong Dou Hao Ge Kai Ji Ke ,Zhe Yang Zuo Bu Hui Gai Bian Xin Xi De Yu Yi .
Cookie
Ru Guo Mou Ge Xiang Ying Zhong Bao Han Yi Xie cookie,Ni Ke Yi Kuai Su Fang Wen Ta Men :
r, err := requests.Get(url, nil)
fmt.Println(r.Cookies)
[BD_NOT_HTTPS=1; Path=/; Max-Age=300 BIDUPSID=7DB59A8D47E763943295969C33979837; Path=/; Domain=baidu.com; Max-Age=2147483647 PSTM=1647233990; Path=/; Domain=baidu.com; Max-Age=2147483647 BAIDUID=7DB59A8D47E7639495833AF6370F9985:FG=1; Path=/; Domain=baidu.com; Max-Age=31536000]
Yao Xiang Fa Song Ni De cookiesDao Fu Wu Qi ,Ke Yi Shi Yong cookies Can Shu :
cookies,_ := cookiejar.New(nil)
// cookies := url.NewCookies() // Tui Jian Shi Yong Zhe Chong
urls, _ := url.Parse("http://httpbin.org/cookies")
cookies.SetCookies(urls,[]*http.Cookie{&http.Cookie{
Name: "cookies_are",
Value: "working",
}})
req.Cookies = cookies
r, err := requests.Get("http://httpbin.org/cookies", req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
{"cookies": {"cookies_are": "working"}}
Huo Zhe :
import (
"fmt"
"github.com/wangluozhe/requests"
"github.com/wangluozhe/requests/url"
)
func main() {
rawUrl := "http://httpbin.org/cookies"
req := url.NewRequest()
//cookies := map[string]string{
// "name": "zhangsan",
// "age": "10",
// "language": "en",
//}
//cookies := map[string]int{
// "age": 20,
// "page": 2,
// "limit": 10,
//}
cookies := map[string]interface{}{
"Hm_lpvt_def79de877408c7bd826e49b694147bc": 1648301329,
"Hm_lvt_def79de877408c7bd826e49b694147bc": "1647245863,1647936048,1648296630",
"_ga": "GA1.1.630251354.1645893020",
}
req.Cookies = url.ParseCookies(rawUrl, cookies)
//req.Cookies = url.ParseCookies(rawUrl,"_ga=GA1.1.630251354.1645893020; Hm_lvt_def79de877408c7bd826e49b694147bc=1647245863,164793604 8,1648296630; Hm_lpvt_def79de877408c7bd826e49b694147bc=1648301329")
r, err := requests.Get(rawUrl, req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
}
{
"cookies": {
"Hm_lpvt_def79de877408c7bd826e49b694147bc": "1648301329",
"Hm_lvt_def79de877408c7bd826e49b694147bc": "1647245863,1647936048,1648296630",
"_ga": "GA1.1.630251354.1645893020"
}
}
Zhong Ding Xiang Yu Qing Qiu Li Shi
Mo Ren Qing Kuang Xia ,Chu Liao HEAD, Requests Hui Zi Dong Chu Li Suo You Zhong Ding Xiang .
Ke Yi Shi Yong Xiang Ying Dui Xiang De history Fang Fa Lai Zhui Zong Zhong Ding Xiang .
Response.History Shi Yi Ge Response Dui Xiang De Lie Biao ,Wei Liao Wan Cheng Qing Qiu Er Chuang Jian Liao Zhe Xie Dui Xiang . Zhe Ge Dui Xiang Lie Biao An Zhao Cong Zui Lao Dao Zui Jin De Qing Qiu Jin Xing Pai Xu .
Li Ru ,Github Jiang Suo You De HTTP Qing Qiu Zhong Ding Xiang Dao HTTPS:
fmt.Println(r.Url)
https://github.com/
fmt.Println(r.StatusCode)
200
fmt.Println(r.History)
[0xc0001803f0]
Ru Guo Ni Shi Yong De Shi GET, OPTIONS, POST, PUT, PATCH Huo Zhe DELETE,Na Yao Ni Ke Yi Tong Guo allow_redirects Can Shu Jin Yong Zhong Ding Xiang Chu Li :
Zhu :Tiao Zhuan Lian Jie Qing Dao headersZhong Zi Xing Huo Qu
req.AllowRedirects = false
r, err := requests.Get("http://github.com", req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.StatusCode)
301
fmt.Println(r.History)
[]
Ru Guo Ni Shi Yong Liao HEAD,Ni Ye Ke Yi Qi Yong Zhong Ding Xiang :
req.AllowRedirects = true
r, err := requests.Get("http://github.com", req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Url)
https://github.com/
fmt.Println(r.History)
[0xc0001803f0]
Chao Shi
Ni Ke Yi Gao Su requests Zai Jing Guo Yi Timeout Can Shu She Ding De Miao Shu Shi Jian Zhi Hou Ting Zhi Deng Dai Xiang Ying . Ji Ben Shang Suo You De Sheng Chan Dai Ma Du Ying Gai Shi Yong Zhe Yi Can Shu . Ru Guo Bu Shi Yong ,Ni De Cheng Xu Ke Neng Hui Yong Yuan Shi Qu Xiang Ying :
req.Timeout = 1 * time.Millisecond
r, err := requests.Get("http://github.com",req)
if err != nil {
fmt.Println(err)
}
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x253460]
goroutine 1 [running]:
main.main()
D:/Go/github.com/wangluozhe/requests/examples/test.go:27 +0xc0
Zhu Yi
Timeout Jin Dui Lian Jie Guo Cheng You Xiao ,Yu Xiang Ying Ti De Xia Zai Wu Guan . Timeout Bing Bu Shi Zheng Ge Xia Zai Xiang Ying De Shi Jian Xian Zhi ,Er Shi Ru Guo Fu Wu Qi Zai Timeout Miao Nei Mei You Ying Da ,Jiang Hui Yin Fa Yi Ge Yi Chang (Geng Jing Que Di Shuo ,Shi Zai Timeout Miao Nei Mei You Cong Ji Chu Tao Jie Zi Shang Jie Shou Dao Ren He Zi Jie De Shu Ju Shi )If no timeout is specified explicitly, requests do not time out.
Ji Ben Shen Fen Ren Zheng
Xu Duo Yao Qiu Shen Fen Ren Zheng De webFu Wu Du Jie Shou HTTP Basic Auth. Zhe Shi Zui Jian Dan De Yi Chong Shen Fen Ren Zheng ,Bing Qie requests Dui Zhe Chong Ren Zheng Fang Shi De Zhi Chi Shi Zhi Jie Kai Xiang Ji Ke Yong .
Yi HTTP Basic Auth Fa Song Qing Qiu Fei Chang Jian Dan :
import (
"fmt"
"github.com/wangluozhe/requests"
"github.com/wangluozhe/requests/url"
)
func main() {
req := url.NewRequest()
req.Auth = []string{"user","password"}
r, err := requests.Get("http://httpbin.org/basic-auth/user/password",req)
if err != nil{
fmt.Println(err)
}
fmt.Println("text:",r.Text())
}
{
"authenticated": true,
"user": "user"
}
Ke Hu Duan Zheng Shu
Ni Ye Ke Yi Zhi Ding Yi Ge Ben Di Zheng Shu Yong Zuo Ke Hu Duan Zheng Shu ,Ke Yi Shi Yi Ge Bao Han Liang Ge Wen Jian Lu Jing De Shu Zu (cert,key)Huo Yi Ge Bao Han San Ge Wen Jian Lu Jing De Shu Zu (cert,key,Gen Zheng Shu ):
req.Cert = []string{"cert","key"}
// req.Cert = []string{"cert","key","rootca"}
r, err := requests.Get("xxx",req)
if err != nil{
fmt.Println(err)
}
Huo Zhe Bao Chi Zai Hui Hua Zhong :
session.Cert = []string{"cert","key"}
Hook Gong Neng (Hooks)
Zhi Chi Zai Qing Qiu Can Shu Jie Xi Jie Duan Zhu Ru Zi Ding Yi Luo Ji . Ru Guo Nin Xu Yao Dui Chuan Ru De any Lei Xing Can Shu Jin Xing Te Shu De Yu Chu Li ,Ke Yi Tong Guo She Zhi Hook Han Shu Lai Shi Xian .
Zhi Chi De Hook Lei Xing :
ParamsHookHeadersHookCookiesHookDataHookFilesHookBodyHook
Shi Li (Example):
Params: "custom_format_string",
// Zi Ding Yi Params Jie Xi Luo Ji
ParamsHook: func(p any) *url.Params {
if s, ok := p.(string); ok {
// Jia She Zhi Xu Chu Li Te Shu Zi Fu Chuan
params := url.NewParams()
params.Set("key", s)
return params
}
return url.ParseParams(p) // Ke Yi Shi Yong ParseParamsJin Xing Dou Di ,FilesHe BodyMei You Parse,Dan Ke Yi Zi Ji Shou Dong Chuang Jian
},
}
Session Zhong Jian Jian (Session Middleware)
Session Ji Bie Zhi Chi Zhong Jian Jian (Middleware),Yun Xu Nin Zai Qing Qiu Fa Song Qian Hou Lan Jie Bing Chu Li Qing Qiu . Zhe Cai Yong Liao Jing Dian De "Yang Cong Mo Xing ",Gua Yong Yu Ri Zhi Ji Lu , Jian Quan , Tong Yi Cuo Wu Chu Li Deng Chang Jing .
Ding Yi Zhong Jian Jian :
Zhong Jian Jian Han Shu De Lei Xing Ding Yi Wei :type Middleware func(next Handler) Handler
Shi Li :Ri Zhi Yu Jian Quan Zhong Jian Jian (Example: Logging & Auth)
import (
"log"
"time"
"github.com/wangluozhe/requests"
"github.com/wangluozhe/requests/models"
"github.com/wangluozhe/requests/url"
)
// 1. Ding Yi Ri Zhi Zhong Jian Jian
func LoggingMiddleware(next requests.Handler) requests.Handler {
return func(preq *models.PrepareRequest, req *url.Request) (*models.Response, error) {
start := time.Now()
log.Printf("[Middleware] Start Request: %s %s", preq.Method, preq.Url)
// Zhi Xing Xia Yi Ge Handler
resp, err := next(preq, req)
duration := time.Since(start)
log.Printf("[Middleware] End Request. Duration: %v", duration)
return resp, err
}
}
// 2. Ding Yi Jian Quan Zhong Jian Jian
func AuthMiddleware(token string) requests.Middleware {
return func(next requests.Handler) requests.Handler {
return func(preq *models.PrepareRequest, req *url.Request) (*models.Response, error) {
// Zi Dong Tian Jia Token Dao Header
if preq.Headers != nil {
preq.Headers.Set("Authorization", "Bearer "+token)
}
return next(preq, req)
}
}
}
func main() {
// Chuang Jian Session
s := requests.NewSession()
// Zhu Ce Zhong Jian Jian (Zhu Yi Shun Xu :Xian Zhu Ce De Xian Zhi Xing )
s.Use(LoggingMiddleware)
s.Use(AuthMiddleware("my-secret-token"))
// Fa Song Qing Qiu
// Gai Qing Qiu Hui Zi Dong Jing Guo LoggingMiddleware He AuthMiddleware
resp, err := s.Get("https://httpbin.org/get", nil)
if err != nil {
panic(err)
}
println(resp.Text())
}
JA3Zhi Wen
requestsYe Zhi Chi JA3Zhi Wen De Xiu Gai ,Ke Yi Rang Ni Zai Fang Wen De Shi Hou Shi Yong Ni Zi Ji Ding Yi De JA3Zhi Wen Jin Xing TLSWo Shou Fang Wen ,Dan Shi Qing Zhu Yi ,JA3Zhi Wen Bi Xu Fu He Yao Qiu ,Bu Neng Sui Bian Geng Gai ,Zui Hao Shi Yong wiresharkHuo Zhe ja3er.comHuo Qu Biao Zhun Zhi Wen ,Er Bu Shi Sui Bian Shu Ru Yi Chuan Shu Zi .
headers := url.NewHeaders()
headers.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36")
req.Headers = headers
req.Ja3 = "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-21,29-23-24,0"
r, err := requests.Get("https://ja3er.com/json", req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Text())
{"ja3_hash":"b32309a26951912be7dba376398abc3b", "transport": "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-21,29-23-24,0", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
TLSZhi Wen
requestsZhi Chi Ni Sui Yi Xiu Gai TLSZhi Wen Xin Xi
import (
"fmt"
http "github.com/wangluozhe/chttp"
"github.com/wangluozhe/requests"
"github.com/wangluozhe/requests/transport"
"github.com/wangluozhe/requests/url"
)
func main() {
req := url.NewRequest()
headers := &http.Header{
"User-Agent": []string{"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0"},
"accept": []string{"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"},
"accept-language": []string{"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"},
"accept-encoding": []string{"gzip, deflate, br"},
"upgrade-insecure-requests": []string{"1"},
"sec-fetch-dest": []string{"document"},
"sec-fetch-mode": []string{"navigate"},
"sec-fetch-site": []string{"none"},
"sec-fetch-user": []string{"?1"},
"te": []string{"trailers"},
http.PHeaderOrderKey: []string{
":method",
":path",
":authority",
":scheme",
},
http.HeaderOrderKey: []string{
"user-agent",
"accept",
"accept-language",
"accept-encoding",
"upgrade-insecure-requests",
"sec-fetch-dest",
"sec-fetch-mode",
"sec-fetch-site",
"sec-fetch-user",
"te",
},
}
req.Headers = headers
req.Ja3 = "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-21,29-23-24,0"
es := &transport.Extensions{
SupportedSignatureAlgorithms: []string{
"ECDSAWithP256AndSHA256",
"ECDSAWithP384AndSHA384",
"ECDSAWithP521AndSHA512",
"PSSWithSHA256",
"PSSWithSHA384",
"PSSWithSHA512",
"PKCS1WithSHA256",
"PKCS1WithSHA384",
"PKCS1WithSHA512",
"ECDSAWithSHA1",
"PKCS1WithSHA1",
},
//CertCompressionAlgo: []string{
// "brotli",
//},
RecordSizeLimit: 4001,
DelegatedCredentials: []string{
"ECDSAWithP256AndSHA256",
"ECDSAWithP384AndSHA384",
"ECDSAWithP521AndSHA512",
"ECDSAWithSHA1",
},
SupportedVersions: []string{
"1.3",
"1.2",
},
PSKKeyExchangeModes: []string{
"PskModeDHE",
},
KeyShareCurves: []string{
"X25519",
"P256",
},
}
tes := transport.ToTLSExtensions(es)
req.TLSExtensions = tes
r, err := requests.Get("https://tls.peet.ws/api/all", req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Request.Headers)
fmt.Println("url:", r.Url)
fmt.Println("headers:", r.Headers)
fmt.Println("text:", r.Text())
}
HTTP2Zhi Wen
requestsZhi Chi HTTP2Zhi Wen Xin Xi De Xiu Gai
import (
"fmt"
http "github.com/wangluozhe/chttp"
"github.com/wangluozhe/requests"
"github.com/wangluozhe/requests/transport"
"github.com/wangluozhe/requests/url"
)
func main() {
req := url.NewRequest()
headers := &http.Header{
"User-Agent": []string{"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0"},
"accept": []string{"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"},
"accept-language": []string{"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"},
"accept-encoding": []string{"gzip, deflate, br"},
"upgrade-insecure-requests": []string{"1"},
"sec-fetch-dest": []string{"document"},
"sec-fetch-mode": []string{"navigate"},
"sec-fetch-site": []string{"none"},
"sec-fetch-user": []string{"?1"},
"te": []string{"trailers"},
http.PHeaderOrderKey: []string{
":method",
":path",
":authority",
":scheme",
},
http.HeaderOrderKey: []string{
"user-agent",
"accept",
"accept-language",
"accept-encoding",
"upgrade-insecure-requests",
"sec-fetch-dest",
"sec-fetch-mode",
"sec-fetch-site",
"sec-fetch-user",
"te",
},
}
req.Headers = headers
req.Ja3 = "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-21,29-23-24,0"
h2s := &transport.H2Settings{
Settings: map[string]int{
"HEADER_TABLE_SIZE": 65536,
//"ENABLE_PUSH": 0,
//"MAX_HEADER_LIST_SIZE": 262144,
//"MAX_CONCURRENT_STREAMS": 1000,
"INITIAL_WINDOW_SIZE": 131072,
"MAX_FRAME_SIZE": 16384,
},
SettingsOrder: []string{
"HEADER_TABLE_SIZE",
"INITIAL_WINDOW_SIZE",
"MAX_FRAME_SIZE",
},
ConnectionFlow: 12517377,
HeaderPriority: map[string]interface{}{
"weight": 42,
"streamDep": 13,
"exclusive": false,
},
PriorityFrames: []map[string]interface{}{
{
"streamID": 3,
"priorityParam": map[string]interface{}{
"weight": 201,
"streamDep": 0,
"exclusive": false,
},
},
{
"streamID": 5,
"priorityParam": map[string]interface{}{
"weight": 101,
"streamDep": 0,
"exclusive": false,
},
},
{
"streamID": 7,
"priorityParam": map[string]interface{}{
"weight": 1,
"streamDep": 0,
"exclusive": false,
},
},
{
"streamID": 9,
"priorityParam": map[string]interface{}{
"weight": 1,
"streamDep": 7,
"exclusive": false,
},
},
{
"streamID": 11,
"priorityParam": map[string]interface{}{
"weight": 1,
"streamDep": 3,
"exclusive": false,
},
},
{
"streamID": 13,
"priorityParam": map[string]interface{}{
"weight": 241,
"streamDep": 0,
"exclusive": false,
},
},
},
}
h2ss := transport.ToHTTP2Settings(h2s)
req.HTTP2Settings = h2ss
r, err := requests.Get("https://tls.peet.ws/api/all", req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Request.Headers)
fmt.Println("url:", r.Url)
fmt.Println("headers:", r.Headers)
fmt.Println("text:", r.Text())
}
JA4Zhi Wen
JA4Shi Shi Yao ,Zen Yao Zu Cheng De ,Qing Kan Hua Zong De Wen Zhang JA4Gai Yao
import (
"fmt"
http "github.com/wangluozhe/chttp"
"github.com/wangluozhe/requests"
"github.com/wangluozhe/requests/transport"
"github.com/wangluozhe/requests/url"
)
func main() {
req := url.NewRequest()
headers := &http.Header{
"Accept": []string{"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-Encoding": []string{"gzip, deflate, br"},
"Accept-Language": []string{"zh-CN,zh;q=0.9"},
"Cache-Control": []string{"no-cache"},
"Connection": []string{"keep-alive"},
"Host": []string{"gospider2.gospiderb.asia:8998"},
"Pragma": []string{"no-cache"},
"sec-ch-ua": []string{"\".Not/A)Brand\";v=\"99\", \"Google Chrome\";v=\"103\", \"Chromium\";v=\"103\""},
"sec-ch-ua-mobile": []string{"\"?0\""},
"sec-ch-ua-platform": []string{"\"Windows\""},
"Sec-Fetch-Dest": []string{"document"},
"Sec-Fetch-Mode": []string{"navigate"},
"Sec-Fetch-Site": []string{"none"},
"Sec-Fetch-User": []string{"\"?1\""},
"Upgrade-Insecure-Requests": []string{"1"},
"User-Agent": []string{"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"},
http.HeaderOrderKey: []string{
"HOST",
"connection",
"pragma",
"Cache-Control",
"sec-ch-ua",
"sec-ch-ua-mobile",
"sec-ch-ua-platform",
"upgrade-insecure-requests",
"user-agent",
"accept",
"sec-fetch-site",
"sec-fetch-mode",
"sec-fetch-user",
"sec-fetch-dest",
"accept-encoding",
"accept-language",
},
http.UnChangedHeaderKey: []string{
"sec-ch-ua",
"sec-ch-ua-mobile",
"sec-ch-ua-platform",
},
}
req.Headers = headers
req.Ja3 = "772,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21-41,29-23-24,0"
req.ForceHTTP1 = true
es := &transport.Extensions{
SupportedSignatureAlgorithms: []string{
"ecdsa_secp256r1_sha256",
"rsa_pss_rsae_sha256",
"rsa_pkcs1_sha256",
"ecdsa_secp384r1_sha384",
"rsa_pss_rsae_sha384",
"rsa_pkcs1_sha384",
"rsa_pss_rsae_sha512",
"rsa_pkcs1_sha512",
},
CertCompressionAlgo: []string{
"brotli",
},
RecordSizeLimit: 4001,
DelegatedCredentials: []string{
"ECDSAWithP256AndSHA256",
"ECDSAWithP384AndSHA384",
"ECDSAWithP521AndSHA512",
"ECDSAWithSHA1",
},
SupportedVersions: []string{
"GREASE",
"1.3",
"1.2",
},
PSKKeyExchangeModes: []string{
"PskModeDHE",
},
KeyShareCurves: []string{
"GREASE",
"X25519",
},
}
tes := transport.ToTLSExtensions(es)
req.TLSExtensions = tes
r, err := requests.Get("https://gospider2.gospiderb.asia:8998/", req)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Request.Headers)
fmt.Println("url:", r.Url)
fmt.Println("headers:", r.Headers)
fmt.Println("text:", r.Text())
}
// Mo Ni Hou De Jie Guo
// JA4: t13d1516h1_dea800f94266_27c5da80acb3
// JA4H: ge11nn13zhcn_d8f538a17def_e3b0c44298fc_e3b0c44298fc
Bian Ma
requestsZhi Chi Yi Xie Chang Yong De Bian Ma Fang Shi ,Bing Qie Ming Ming Geng Shi Ren Yi Dong . Chuan Di De Can Shu Ke Wei Zi Fu Chuan (string)Huo Zi Fu Shu Zu ([]byte)Lei Xing .
16Jin Zhi Bian Ma
import (
"fmt"
"github.com/wangluozhe/requests/utils"
)
func main() {
url := "https://www.baidu.com"
hexen := utils.HexEncode(url)
fmt.Println(hexen)
fmt.Println(string(hexen))
hexde := utils.HexDecode(hexen)
fmt.Println(hexde)
fmt.Println(string(hexde))
}
[54 56 55 52 55 52 55 48 55 51 51 97 50 102 50 102 55 55 55 55 55 55 50 101 54 50 54 49 54 57 54 52 55 53 50 101 54 51 54 102 54 100]
68747470733a2f2f7777772e62616964752e636f6d
[104 116 116 112 115 58 47 47 119 119 119 46 98 97 105 100 117 46 99 111 109]
https://www.baidu.com
URIBian Ma
import (
"fmt"
"github.com/wangluozhe/requests/utils"
)
func main() {
url := "https://www.baidu.com?page=10&abc=123&name=Ni Hao A "
encode := utils.EncodeURIComponent(url)
fmt.Println(encode)
decode := utils.DecodeURIComponent(encode)
fmt.Println(decode)
encode1 := utils.EncodeURI(url)
fmt.Println(encode1)
decode1 := utils.DecodeURI(encode1)
fmt.Println(decode1)
escape := utils.Escape(url)
fmt.Println(escape)
unescape := utils.UnEscape(escape)
fmt.Println(unescape)
}
https%3A%2F%2Fwww.baidu.com%3Fpage%3D10%26abc%3D123%26name%3D%E4%BD%A0%E5%A5%BD%E5%95%8A
https://www.baidu.com?page=10&abc=123&name=Ni Hao A
https://www.baidu.com?page=10&abc=123&name=%E4%BD%A0%E5%A5%BD%E5%95%8A
https://www.baidu.com?page=10&abc=123&name=Ni Hao A
https%3A//www.baidu.com%3Fpage%3D10%26abc%3D123%26name%3D%u4f60%u597d%u554a
https://www.baidu.com?page=10&abc=123&name=Ni Hao A
Base64Bian Ma
import (
"fmt"
"github.com/wangluozhe/requests/utils"
)
func main() {
url := "https://www.baidu.com?page=10&abc=123&name=Ni Hao A "
base32en := utils.Base32Encode(url)
fmt.Println(base32en)
base32de := utils.Base32Decode(base32en)
fmt.Println(base32de)
base64en := utils.Base64Encode(url)
fmt.Println(base64en)
base64de := utils.Base64Decode(base64en)
fmt.Println(base64de)
// Huo Zhe Xiang JavaScriptYu Yan Yi Yang
btoa := utils.Btoa(url)
fmt.Println(btoa)
atob := utils.Atob(btoa)
fmt.Println(atob)
}
NB2HI4DTHIXS653XO4XGEYLJMR2S4Y3PNU7XAYLHMU6TCMBGMFRGGPJRGIZSM3TBNVST3ZF5UDS2LPPFSWFA====
https://www.baidu.com?page=10&abc=123&name=Ni Hao A
aHR0cHM6Ly93d3cuYmFpZHUuY29tP3BhZ2U9MTAmYWJjPTEyMyZuYW1lPeS9oOWlveWVig==
https://www.baidu.com?page=10&abc=123&name=Ni Hao A
aHR0cHM6Ly93d3cuYmFpZHUuY29tP3BhZ2U9MTAmYWJjPTEyMyZuYW1lPeS9oOWlveWVig==
https://www.baidu.com?page=10&abc=123&name=Ni Hao A
Jia Mi Suan Fa
requestsZhi Chi Yi Xie Chang Yong De Jia Mi Suan Fa ,Bing Qie Ming Ming Geng Shi Ren Yi Dong . Chuan Di De Can Shu Ke Wei Zi Fu Chuan (string)Huo Zi Fu Shu Zu ([]byte)Lei Xing .
Xian Xing San Lie (Hash)Suan Fa
MDXi Lie :
import (
"fmt"
"github.com/wangluozhe/requests/utils"
)
func main() {
m := utils.MD4("123")
fmt.Println("MD4:", m)
m = utils.RIPEMD160("123")
fmt.Println("RIPEMD160:", m)
m = utils.MD5("123")
fmt.Println("MD5:", m)
}
MD4: c58cda49f00748a3bc0fcfa511d516cb
RIPEMD160: e3431a8e0adbf96fd140103dc6f63a3f8fa343ab
MD5: 202cb962ac59075b964b07152d234b70
SHAXi Lie :
import (
"fmt"
"github.com/wangluozhe/requests/utils"
)
func main() {
s1 := utils.SHA1("123")
b64 := utils.Btoa(s1)
h16 := utils.HexEncode(s1)
fmt.Println("SHA1-base64:", b64)
fmt.Println("SHA1-hex:", string(h16))
s2 := utils.SHA224("123")
b64 = utils.Btoa(s2)
h16 = utils.HexEncode(s2)
fmt.Println("SHA224-base64:", b64)
fmt.Println("SHA224-hex:", string(h16))
s2 = utils.SHA256("123")
b64 = utils.Btoa(s2)
h16 = utils.HexEncode(s2)
fmt.Println("SHA256-base64:", b64)
fmt.Println("SHA256-hex:", string(h16))
s5 := utils.SHA384("123")
b64 = utils.Btoa(s5)
h16 = utils.HexEncode(s5)
fmt.Println("SHA384-base64:", b64)
fmt.Println("SHA384-hex:", string(h16))
s5 = utils.SHA512("123")
b64 = utils.Btoa(s5)
h16 = utils.HexEncode(s5)
fmt.Println("SHA512-base64:", b64)
fmt.Println("SHA512-hex:", string(h16))
}
SHA1-base64: QL0AFWMIX8NRZTKeof9cXsvbvu8=
SHA1-hex: 40bd001563085fc35165329ea1ff5c5ecbdbbeef
SHA224-base64: eNgEXWhKvS7s6SN1jzzXgUid86SOEniYJGYBfw==
SHA224-hex: 78d8045d684abd2eece923758f3cd781489df3a48e1278982466017f
SHA256-base64: pmWkWSBCL51Bfkhn79xPuKBKHz//H6B+mY6G9/eieuM=
SHA256-hex: a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
SHA384-base64: mgqC8MDPMUcNev/t40BsyaqEEGcVILcnBE7aFbTCVTKptc2Kr5zsSRnXYlW2v7AP
SHA384-hex: 9a0a82f0c0cf31470d7affede3406cc9aa8410671520b727044eda15b4c25532a9b5cd8aaf9cec4919d76255b6bfb00f
SHA512-base64: PJkJr+wlNU1VHa4hWQuybjjVPyFzuNPcPu5MBH56scHri4UQPjvnumE7MbtcnDYhTcnxSkL9ei/bhIVrylxEwg==
SHA512-hex: 3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2
HmacXi Lie :
import (
"fmt"
"github.com/wangluozhe/requests/utils"
)
func main() {
md4 := utils.HmacMD4("123", "123")
bs64 := utils.Btoa(md4)
hex := utils.HexEncode(md4)
fmt.Println("HmacMD4-base64:", bs64)
fmt.Println("HmacMD4-hex:", string(hex))
r160 := utils.HmacRIPEMD160("123", "123")
bs64 = utils.Btoa(r160)
hex = utils.HexEncode(r160)
fmt.Println("HmacRIPEMD160-base64:", bs64)
fmt.Println("HmacRIPEMD160-hex:", string(hex))
md5 := utils.HmacMD5("123", "123")
bs64 = utils.Btoa(md5)
hex = utils.HexEncode(md5)
fmt.Println("HmacMD5-base64:", bs64)
fmt.Println("HmacMD5-hex:", string(hex))
sha1 := utils.HmacSHA1("123", "123")
bs64 = utils.Btoa(sha1)
hex1 := utils.HexEncode(sha1)
fmt.Println("HmacSHA1-base64:", bs64)
fmt.Println("HmacSHA1-hex:", string(hex1))
sha224 := utils.HmacSHA224("123", "123")
bs64 = utils.Btoa(sha224)
hex2 := utils.HexEncode(sha224)
fmt.Println("HmacSHA224-base64:", bs64)
fmt.Println("HmacSHA224-hex:", string(hex2))
sha256 := utils.HmacSHA256("123", "123")
bs64 = utils.Btoa(sha256)
hex3 := utils.HexEncode(sha256)
fmt.Println("HmacSHA256-base64:", bs64)
fmt.Println("HmacSHA256-hex:", string(hex3))
sha384 := utils.HmacSHA384("123", "123")
bs64 = utils.Btoa(sha384)
hex4 := utils.HexEncode(sha384)
fmt.Println("HmacSHA384-base64:", bs64)
fmt.Println("HmacSHA384-hex:", string(hex4))
sha512 := utils.HmacSHA512("123", "123")
bs64 = utils.Btoa(sha512)
hex5 := utils.HexEncode(sha512)
fmt.Println("HmacSHA512-base64:", bs64)
fmt.Println("HmacSHA512-hex:", string(hex5))
}
HmacMD4-base64: u3owGP+65If/IdHlG8klJg==
HmacMD4-hex: bb7a3018ffbae487ff21d1e51bc92526
HmacRIPEMD160-base64: Wt1vTR04ulq64/WbCZsoGMY1wM8=
HmacRIPEMD160-hex: 5add6f4d1d38ba5abae3f59b099b2818c635c0cf
HmacMD5-base64: sqHsDz4GBwmdfzl5HATppA==
HmacMD5-hex: b2a1ec0f3e0607099d7f39791c04e9a4
HmacSHA1-base64: o8Ak8BzMs7Y0V9hIsNL4nB90Sj0=
HmacSHA1-hex: a3c024f01cccb3b63457d848b0d2f89c1f744a3d
HmacSHA224-base64: +S2OBxrerlFMGsD5RQLnW7XCi4F+DgoB52I0jw==
HmacSHA224-hex: f92d8e071adeae514c1ac0f94502e75bb5c28b817e0e0a01e762348f
HmacSHA256-base64: PK/kD5K+asd9J5K0smfC2hHj8wh7k7sZxsUTN4aYS0Q=
HmacSHA256-hex: 3cafe40f92be6ac77d2792b4b267c2da11e3f3087b93bb19c6c5133786984b44
HmacSHA384-base64: b2i1J57kVppw+dC071Gk25fXfLkBmcILY38gkOOXgPjuyE8wK+LuP+w2pzTZ5tpb
HmacSHA384-hex: 6f68b5279ee4569a70f9d0b4ef51a4db97d77cb90199c20b637f2090e39780f8eec84f302be2ee3fec36a734d9e6da5b
HmacSHA512-base64: BjT9BDgLuvUGnIxGp0x9Id90FIiNmAwnoW1eJiy4yQWROcIS0JJgAPrwJuSDkEzvri9enZvV9R+8KsTE3lGBFQ==
HmacSHA512-hex: 0634fd04380bbaf5069c8c46a74c7d21df7414888d980c27a16d5e262cb8c9059139c212d0926000faf026e483904cefae2f5e9d9bd5f51fbc2ac4c4de518115