我正在使用外部API /网络,其名称上包含@
的Cookie。 Go-lang不支持此操作并忽略Set-Cookie
。
如何在不直接修改Go源代码的情况下实现此目的?
在Go上实施:
http://tools.ietf.org/html/rfc6265#section-4.1.1 specifies that:
set-cookie-header = "Set-Cookie:" SP set-cookie-string
set-cookie-string = cookie-pair *( ";" SP cookie-av )
cookie-pair = cookie-name "=" cookie-value
cookie-name = token
Then in http://tools.ietf.org/html/rfc2616#section-2.2, token is
specified as:
token = 1*<any CHAR except CTLs or separators>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
答案 0 :(得分:1)
Cookie只是具有键值对的标题,它们并不复杂。因此,请从此处复制所需的代码,并使用它以您自己的方式解析set-cookie标头,而不是依赖于stdlib。
https://golang.org/src/net/http/cookie.go
您可以调整此功能以允许@:
func isNotToken(r rune) bool {
// Allow @, unlike the go stdlib
// document reasons here
if r == '@' {
return false
}
return !httplex.IsTokenRune(r)
}
或者,抓住标题并在这个特定的实例中编写一些更简单的解析代码,因为您需要阅读的内容是这样的:
Set-Cookie:example @ example =“abc”; Path = /
如果解析一个简单的可预测cookie值,你可能会使用strings.Split或regexp。