我是一个新手,试图调用 cyberark 来获取秘密,并试图弄清楚如何参数化令牌值。该值源自在此 API 调用之前发生的另一个其余 API 调用。所以我想传递来自其他 API 调用的响应并作为令牌传递到此处。下面是我的代码;我尝试为从其他 API 调用获得的令牌响应创建一个变量,以便能够在此处使用,但遇到了不同的格式错误,例如字符串错误中的换行符等。
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://secrets.com/password"
method := "GET"
client := &http.Client {
}
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Accept-Encoding", "base64")
req.Header.Add("Authorization", "Token token=\"eyJwcm90ZWN0ZWQiOiJleU\"")
req.Header.Add("Accept", "application/json")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
创建一个包含先前 API 调用的令牌的结构对象,然后对其进行解组并将该对象作为参数传递给此函数..
type ResponsePayload struct {
Token string
}
... // Inside the other API call
var payload ResponsePayload
json.NewDecoder(otherAPIResp.Body).Decode(&payload)
在这个 API 调用中
client := &http.Client {}
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
tokenStr := fmt.Sprintf("Token token=\"%s\"", payload.Token) // Format token with string formatter.
req.Header.Add("Accept-Encoding", "base64")
req.Header.Add("Authorization", tokenStr)
req.Header.Add("Accept", "application/json")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
希望这有帮助!