第一种,建立多个 request,并将请求发送出去
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/http/cookiejar"
"strings"
)
func main() {
//通过 cookiejar 处理 cookie
jar := cookiejar.New(nil)
client := http.Client{
Jar: jar,
}
//第一次请求,获取 cookie
req1, _ := http.NewRequest("GET", "http://a.com", nil)
req1.Header.Set("Accept", "略...")
req1.Header.Set("User-Agent", "略...")
req1.Header.Set("略 1", "略...")
req1.Header.Set("略 2", "略...")
client.Do(req1)
//第二次请求,登录
req2, _ := http.NewRequest("POST", "http://a.com/login", strings.NewReader("表单内容"))
req2.Header.Set("Accept", "略...")
req2.Header.Set("User-Agent", "略...")
req2.Header.Set("略 1", "略...")
req2.Header.Set("略 2", "略...")
client.Do(req2)
//第三次请求,获取需要的信息
req3, _ := http.NewRequest("GET", "http://a.com/foo", nil)
req3.Header.Set("Accept", "略...")
req3.Header.Set("User-Agent", "略...")
req3.Header.Set("略 1", "略...")
req3.Header.Set("略 2", "略...")
resp, _ := client.Do(req3)
//获取 resp 中需要的信息
//省略
}
第二种,建立一个 request,后续修改这个 request,再发送
func main() {
jar := cookiejar.New(nil)
client := http.Client{
Jar: jar,
}
//第一次请求,获取 cookie
req, _ := http.NewRequest("GET", "http://a.com", nil)
req1.Header.Set("Accept", "略...")
req1.Header.Set("User-Agent", "略...")
req1.Header.Set("略 1", "略...")
req1.Header.Set("略 2", "略...")
client.Do(req)
//第二次请求,登录
//import "net/url"
//import "io/ioutil"
req.Method = "POST"
secondURL, _ := url.Parse("http://a.com/login")
req.URL = secondURL
req.Body = ioutil.NopCloser(strings.NewReader("表单内容"))
client.Do(req)
//第三次请求,获取需要的信息
req.Method = "GET"
thirdURL, _ := url.Parse("http://a.com/foo")
req.URL = thirdURL
req.Body = nil
resp, _ := client.Do(req)
//获取 resp 中需要的信息
}
这两种方式哪种更合适呢?
1
petelin 2018-10-28 18:50:30 +08:00 via iPhone
第一种 直观
|
2
hellos OP @petelin 只请求个一两次还好,如果请求个五六次,就要设置五六次 header,没有更好的方法了吗?
|
5
hellos OP |
6
jessynt 2018-10-28 21:33:57 +08:00 1
|