因此,我想通过Go与ShurCool或Hasura Go客户端(GO包)从GraphQL服务器查询数据,但数据服务器需要类似‘x-hasura-admin-ret’的密钥和值包含在请求头中.

在两个包的文档中都没有提到如何做到这一点(设置头部键和值),它只提到了如何设置访问令牌.

推荐答案

https://github.com/hasura/go-graphql-client提供的客户端有一个WithRequestModifier方法.您可以添加一个请求头,如下所示:

import (
    "net/http"
    graphql "github.com/hasura/go-graphql-client"
)

func gqlInit() {
    client := graphql.NewClient("your graphql url here", nil)
    client = client.WithRequestModifier(func(r *http.Request) {
        r.Header.Set("x-hasura-admin-secret", "secret")
    })
}

看看https://github.com/shurcooL/graphql和相关的github lib,他们似乎希望你传递一个*http.Client,为你添加标题,你可以这样做:

import (
    "net/http"
    graphql "github.com/shurcooL/graphql"
)

type hasuraAuthTransport struct {
    secret string
}

func (h hasuraAuthTransport) RoundTrip(req *http.Request) (resp *http.Response, err error) {
    req.Header.Set("x-hasura-admin-secret", h.secret)
    return http.DefaultTransport.RoundTrip(req)
}

func gqlInit() {
    client := graphql.NewClient("your graphql url here", &http.Client{
        Transport: hasuraAuthTransport{secret: "secret"},
    })
}

Go相关问答推荐

如何在定制普罗米修斯出口商中测试动态计量注册?

如何在另一个文件夹中使用Delve运行二进制文件?

在Golang中,@LATEST和@UPGRADE特殊查询有什么不同?

难以为多个平台添加Go Bazel构建选项

如何配置vscode以在Go中显示不必要的(过度指定的)泛型?

Docker 执行失败并显示cmd/ENTRYPOINT 中的命令未找到

是否需要手动调用rand.Seed?

有没有办法在 Golang 中使用带有 go-simple-mail lib 的代理?

Go Programming Language书上的例子server2错了吗?

Golang 网络应用程序安全性:您是否应该判断输入是否为有效的 utf-8?

自定义 Fyne 自适应网格布局

在嵌套模板中使用变量,它也被定义为 go 模板中的变量?

不能使用 mockDB(*MockDB 类型的变量)作为 struct 文字中的 *gorm.DB 值

Wire google Inject with multi return from provider 函数

如何将文件上传到 Google Drive,并与使用服务帐户和 Golang 的任何人共享

如何在 helm 中将字符串连接到 .AsConfig 的结果?

Golang - 将 [8] 布尔转换为字节

转到文本/模板模板:如何根据模板本身的值数组判断值?

Go:如何创建一个可以提供配置文件中描述的 url 的服务器

Go 错误:cannot use generic type without instantiation