第一种,建立多个 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 中需要的信息
}
这两种方式哪种更合适呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.