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

Go 添加对cookie名称上分隔符的支持,go,cookies,Go,Cookies,我正在使用一个外部API/web,它有一个cookie,其名称上有一个@。Go lang不支持此操作,并忽略设置Cookie 如何在不直接修改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 *( "

我正在使用一个外部API/web,它有一个cookie,其名称上有一个
@
。Go lang不支持此操作,并忽略
设置Cookie

如何在不直接修改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
http://tools.ietf.org/html/rfc6265#section-4.1.1规定:
set cookie header=“set cookie:”SP set cookie string
设置cookie字符串=cookie对*(“;”SP cookie av)
cookie对=cookie名称“=”cookie值
cookie名称=令牌
然后在http://tools.ietf.org/html/rfc2616#section-2.2,令牌为
指定为:
令牌=1*
分隔符=“(“|”)”|“|”@”

|“,“|”;“|”:“|”\“|Cookies只是带有键值对的标题,它们并不复杂。因此,从这里复制您需要的代码,并使用它以您自己的方式解析set cookie头,而不是依赖stdlib

您可能可以调整此函数以允许@:

func isNotToken(r rune) bool {
    // Allow @, unlike the go stdlib
    // document reasons here
    if r == '@' {
        return false
    }

    return !httplex.IsTokenRune(r)
}
或者,抓住标题,在这个特定实例中编写一些更简单的解析代码,因为您需要阅读的内容如下:

设置Cookie:example@example=“abc”;路径=/


如果解析一个简单的可预测cookie值,您可能可以使用strings.Split或regexp

做两件事:1。打开API的错误报告(它已损坏)。2.使用原始HTTP头(在那里你可以做任何你或API设计者喜欢的事情)。@Volker它没有被破坏。它只是遵循规范。我也发现了这一点。它被破坏了,因为它在cookie值中使用了@。这就是破碎的定义。@Volker哦,我还以为你在说GolangAPI呢。是的,我正在使用的外部api已损坏。谢谢。我采用了一种运输方式,它确实job@majidarif什么是运输方式?@CeriseLimón喜欢这样做: