使用http重用进行意外行为

时间:2016-07-26 14:27:45

标签: http go runtime-error

我有从以下地方获取令牌的功能:

func getToken(client *http.Client) (string, error) {
    fmt.Printf("Starting with token...\n")
    // Token service URL
    apiUrl := "http://url.to.obtain.token"

    // Data to send when getting a token
    data := url.Values{}
    data.Set("username", "my-username")
    data.Set("password", "my-password")

    // Create a POST request
    request, _ := http.NewRequest("POST", apiUrl, bytes.NewBufferString(data.Encode()))
    // Add needed headers
    request.Header.Add("Content-Type", "application/x-www-form-urlencoded")
    request.Header.Add("Content-Length", strconv.Itoa(len(data.Encode())))

    // Issue the POST
    resp, err := client.Do(request)
    if err != nil {
        return "", err
    } else {
        // Getting the token and transform it to string
        htmlData, _ := ioutil.ReadAll(resp.Body)
        resp.Body.Close()
        body := string(htmlData)
        return body, nil
    }
}

然后我有我的主要功能:

func main() {
    client := &http.Client{}

    token, _ := getToken(client)

    apiUrl := "http://url.that.actually.uses.token"

    requ, _ := http.NewRequest("GET", apiUrl, nil)

    requ.Header.Add("Authorization", token) // (lineX - for later reference)

    resp, err := client.Do(requ)
    if err != nil {
        log.Fatal(err)
    } else {
        htmlData, _ := ioutil.ReadAll(resp.Body)
        resp.Body.Close()
        body := string(htmlData)
        fmt.Printf(body)
    }
}

lineX中,我收到运行时错误,如:

panic: runtime error: invalid memory address or nil pointer dereference

我尝试了各种各样的事情(甚至重复使用跨职能的客户端)。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

网址格式错误,因此NewRequest无法正确解析。始终使用错误处理!