gpt4 book ai didi

curl - 使用 Golang 的 net/http header

转载 作者:IT王子 更新时间:2023-10-29 02:17:08 26 4
gpt4 key购买 nike

我在为与 Jenkins RESTful API 交互而编写的 Golang 代码中添加了 crumb CSRF 保护支持 (https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API)

结构:

type Crumb struct {
Crumb string `json:"crumb"`
CrumbRequestField string `json:"crumbRequestField"`
}

代码

  ...
crb := Crumb{}
// did some work to jsonify the crumb to Golang struct
// https://jenkins.mydomain.com/crumbIssuer/api/json
...


if (crb.Crumb != "" && crb.CrumbRequestField != "" ) {
req.Header.Set(crb.CrumbRequestField, crb.Crumb)
}

req.SetBasicAuth(jenkins.auth.Username, jenkins.auth.ApiToken)

// i think the issue is related to DefaultClient, but not sure
return http.DefaultClient.Do(req)

但是使用上面的 Golang 实现不断得到 403,但是同样的事情在 cURL 调用中工作正常。

&{403 No valid crumb was included in the request 403 HTTP/1.1 1 1 map[Server:[nginx] Date:[Thu, 31 Jul 2014 05:58:52 GMT] Content-Type:[text/html;charset=ISO-8859-1] Connection:[keep-alive] Cache-Control:[must-revalidate,no-cache,no-store]] 0xc20800ff80 -1 [chunked] false map[] 0xc2082ba270 0xc208005da0}

curl 日志:

> POST /computer/node1/toggleOffline HTTP/1.1
> Authorization: Basic <key>
> User-Agent: curl/7.30.0
> Host: jenkins.mydomain.com
> Accept: */*
> .crumb: 0d6401898751f250ff1f95b5bf9589db

最佳答案

我在这里回答我自己的问题。我发现了我的问题,它与 Golang 的 net/http 库无关。 Jenkins crumb GET 请求要求您提供基本身份验证才能正确获取 crumb。

关于curl - 使用 Golang 的 net/http header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25052286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com