Closed
Description
代码:
_, err := req.DevMode().R().SetDigestAuth("username", "password").Put(url)
if err != nil {
panic(err)
}
Output:
HTTP/1.1 401 Unauthorized
Date: Thu, 30 May 2024 17:28:44 GMT
Server: web
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval'
X-XSS-Protection: 1
Strict-Transport-Security: max-age=31536000;includeSubDomains
X-Content-Type-Options: nosniff
Content-Length: 142
Content-Type: text/html
Connection: close
WWW-Authenticate: Digest realm="DS-TCG405-E", domain="::", qop="auth", nonce="4d6b493452444d335130553659324534597a41304f47493d", opaque="", algorithm="MD5", stale="FALSE"
X-Appweb-Seq: 193970
panic: digest: algorithm is not supported
req 无法识别 algorithm="MD5",
想请问为什么 c.algorithm 不使用 strings.Trim
digest.go:
func parseChallenge(input string) (*challenge, error) {
const ws = " \n\r\t"
const qs = `"`
s := strings.Trim(input, ws)
if !strings.HasPrefix(s, "Digest ") {
return nil, errDigestBadChallenge
}
s = strings.Trim(s[7:], ws)
sl := strings.Split(s, ",")
c := &challenge{}
var r []string
for i := range sl {
r = strings.SplitN(strings.TrimSpace(sl[i]), "=", 2)
if len(r) != 2 {
return nil, errDigestBadChallenge
}
switch r[0] {
case "realm":
c.realm = strings.Trim(r[1], qs)
case "domain":
c.domain = strings.Trim(r[1], qs)
case "nonce":
c.nonce = strings.Trim(r[1], qs)
case "opaque":
c.opaque = strings.Trim(r[1], qs)
case "stale":
c.stale = r[1]
case "algorithm":
// Here
c.algorithm = r[1]
case "qop":
c.qop = strings.Trim(r[1], qs)
case "charset":
if strings.ToUpper(strings.Trim(r[1], qs)) != "UTF-8" {
return nil, errDigestCharset
}
case "userhash":
c.userhash = strings.Trim(r[1], qs)
default:
return nil, errDigestBadChallenge
}
}
return c, nil
}
Metadata
Assignees
Labels
No labels
Activity