如何在Go中设置null授权头?

时间:2016-11-26 21:10:28

标签: curl go https

我正在为我的程序编写一个测试套件,用于从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))
}

1 个答案:

答案 0 :(得分:2)

您的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标头。所以只需删除该行,您的代码就会立即生效。