【问题标题】:How to set null authorization header in Go?如何在 Go 中设置空授权标头?
【发布时间】:2017-04-10 22:17:47
【问题描述】:

我正在为我的程序编写一个从 Github API 获取数据的测试套件。我需要设置一个空的身份验证标头。它适用于 curl,但不适用于我的 Go 程序。

我尝试按照here 的建议将其设置为“null”。我也尝试过nil"",但都不起作用。

输出(此处复制太长但您可以自己尝试)与curl -H "Authorization: " "https://api.github.com/repos/octocat/Hello-World/issues?state=open&per_page=1&page=1" 的预期一致

但这是在 Go 中设置了相同的空标头的输出:

{"message":"Bad credentials","documentation_url":"https://developer.github.com/v3"}

这是代码(请不要建议我只删除req.Header.Set() 行。我需要将其保留在我的测试套件中)

func main() {

        client := &http.Client{}

        //issues API from Github
        req, err := http.NewRequest("GET", "https://api.github.com/repos/octocat/Hello-World/issues?state=open&per_page=1&page=1", nil)
        if err != nil {
                log.Fatal(err)
        }   

        //set authorization header. I have tried nil, and ""
        req.Header.Set("Authorization", "null")

        resp, err := client.Do(req)
        if err != nil {
                log.Fatal(err)
        }   

        defer resp.Body.Close()

        //convert to a usable slice of bytes
        body, err := ioutil.ReadAll(resp.Body)
        if err != nil {
                fmt.Println("couldn't read issues list", err)
        }   

        fmt.Println(string(body))
}

【问题讨论】:

    标签: curl go https


    【解决方案1】:

    您的curl 命令未设置空的Authorization 标头; curl 命令将排除 Authorization 标头。可以通过添加-v参数来验证:

    curl -H "Authorization: " -v "https://api.github.com/repos/octocat/Hello-World/issues?state=open&per_page=1&page=1"
    

    话虽如此,您也不应该在 Go 代码中设置 Authorization 标头。因此,只需删除该行,您的代码就会立即生效。

    【讨论】:

    • 感谢有关 curl 的提示。我需要在我的 Go 代码中保留该行,因为我需要为我的测试传递多个令牌。但是鉴于你所说的,如果我没有令牌,我想我会写一个条件来排除设置标题。谢谢,我会尽快接受您的答复。
    猜你喜欢
    • 2019-09-28
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2017-08-18
    • 2017-08-30
    • 2021-11-21
    相关资源
    最近更新 更多