【发布时间】:2018-04-25 21:06:22
【问题描述】:
我使用 go package net/http,我想发布到登录 url,然后获取节点页面 我想使用两次 client.Do 因为 cookie 这是我的代码
package main
import (
"log"
"net/http"
"net/http/cookiejar"
"net/url"
)
func main() {
cookieJar, _ := cookiejar.New(nil)
client := &http.Client{
Jar: cookieJar,
}
loginUrl, _ := url.Parse("https://pro.v2bz.com/auth/login")
v := url.Values{}
v.Add("email", "1231231231@qq.com")
v.Add("passwd", "1231231231")
req := &http.Request{
Method: "POST",
URL: loginUrl,
PostForm: v,
}
resp, err := client.Do(req)
if err != nil {
log.Println("login failed", err)
}
defer resp.Body.Close()
log.Println(resp.Status)
nodeUrl, _ := url.Parse("https://pro.v2bz.com/user/node")
nodeReq := &http.Request{
Method: "GET",
URL: nodeUrl,
}
nodeResp, err := client.Do(nodeReq)
if err != nil {
log.Println("node request failed", err)
}
log.Println(nodeResp.Status)
}
但是我得到了这个错误 恐慌:分配给 nil 映射中的条目 如何在一个代码中使用两次 client.Do?
【问题讨论】:
-
不要只打印错误并继续——如果出现错误,
http.Response将无法使用。 -
也停止忽略错误。该代码中有 3 个地方将错误返回值转储到下划线中。检查错误,你不能只是假设一切都成功。如果它返回错误,那是因为该函数可能会失败。恐慌堆栈跟踪将准确指定代码中发生故障的位置。
-
让我印象深刻的一件事是您正在创建一个 http.Request 作为文字。 Request 结构有一个映射 Header,您没有初始化它。请改用 http.NewRequest()。
-
指出引用代码的哪一行导致引用错误会很有帮助。
-
第二个 client.Do 中的恐慌。如果我不使用 cookie 我没问题,但我无法保留 cokies。