我正在使用 goRequest http://parnurzeal.github.io/gorequest/对我需要与之交谈的服务器进程发出一些 HTTP 请求。身份验证过程是这样工作的;发送带有身份验证标头集的 GET 请求。没问题,但我需要从响应中获取标头并使用返回值重新验证每个后续请求。重新调整的 HTTP 标头如下所示。Response headersmap[Location:[900767244] Content-Type:[application/xml] Date:[Fri, 18 Sep 2015 18:19:41 GMT] Server:[Apache] X-Frame-Options:[SAMEORIGIN] Set-Cookie:[JSESSIONID=D5C976F5646365FF030DBAD770DA774C; Path=/; Secure; HttpOnly]]我需要获取该位置值,因为它是我的会话令牌。如果我像这样抓住它:session, ok := response.Header["Location"]if !ok { fmt.Println("Did not receive a location header.")}fmt.Println("Session: ", session)我可以得到它,但它是一个切片而不是一个字符串。如何将该值作为字符串获取,以便我可以将其弹回到我的请求标头中?正如您在以下错误中看到的:./login.go:133: cannot use session (type []string) as type string in argument to logoutRequest.Delete非常感谢!克雷格
2 回答
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
如果您想要一个值,请使用Header 的 Get 方法
location := response.Header.Get("Location")
这也为您规范了标题名称,因此即使使用略有不同的大写字母,您仍然可以获得一个值。
http.Header
当您需要获取的值多于第一个可能值时,您只需要直接索引一个值。如果您希望所有值都具有规范化的标头名称,则可以使用textproto.CanonicalMIMEHeaderKey
vals := response.Header[textproto.CanonicalMIMEHeaderKey(header)]
眼眸繁星
TA贡献1873条经验 获得超9个赞
标头的位置是一个数组,您只需要传递Location[0]给该方法,而不仅仅是Location因为它是一个切片。话虽如此,在不检查边界的情况下对数组进行索引是不安全的,因此您可能应该这样做;
if len(Location) == 1 {
logoutRequest(Location[0])
} else {
// error state
}
最后一件事是在未来为您提供指导。你可以看出响应头对象的类型更像这样;map[string][]string(实际上,可能 []interface{} 但我不确定输出)通过看到外括号内的每个项目[]的值都包含在另一组括号中,这意味着它是一个可以包含 0 或更多的数组值。
- 2 回答
- 0 关注
- 189 浏览
添加回答
举报
0/150
提交
取消