go - 如何使用两个客户端。请使用 golang
问题描述
我使用 th go package net/http,我想发布到登录 url,然后获取我想使用两次客户端的节点页面。因为 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)
}
但是我得到了这个错误 恐慌:分配到零映射中的条目 我怎么能在一个代码中使用两次client.Do?
解决方案
该错误不是因为您使用client.Do
了两次。事实上,您可以多次调用它。错误消息表明在map
某处访问了一个未分配的变量 (a)。在您的情况下,导致错误的变量是Request.Header
. 使用适当的方法来构造请求,例如http.NewRequest:
nodeReq, err := http.NewRequest("GET", nodeUrl, nil)
在发送表单内容的 POST 请求时,使用Client.PostForm,例如
resp, err := client.PostForm(loginUrl, v)
此方法将设置适当的Content-Type
标头,然后调用client.Do
.
推荐阅读
- c# - 身份验证和 RouteConfig
- django - 无法使用 django rest 框架使用自引用生成正确的树结构输出
- c# - 如何在 UserControl 中向 CheckBox 添加功能
- python - numpy.matrix_power 的输出不同于公式化的求解方式
- c - 使用指针访问结构变量时,Cache 会带来什么?
- netlogo - 有没有办法在 NetLogo 中创建不可逾越的障碍?
- angular - 无法在 html 文件中使用 MatTable 和 DataSource:Angularjs7 Angular material 7
- c# - 从另一个 xaml 文件中定义的控件绑定到 ParentViewModel
- dart - 删除列表中的尾随空格
- python - Pip install upgrade 无法删除临时文件