在cookie名称上添加对分隔符的支持

时间:2017-10-29 17:47:40

标签: go cookies

我正在使用外部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

1 个答案:

答案 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。