首页 > 解决方案 > 如何使用两个客户端。请使用 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?

标签: gocookiesclient

解决方案


该错误不是因为您使用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.


推荐阅读