用cookie测试请求

时间:2014-12-19 11:10:52

标签: go

我写了一个cookie getter和setter。现在我想测试它,并编写了以下测试函数。

func TestAuthorizationReader(t *testing.T) {

    tw := httptest.NewServer(testWriter())
    tr := httptest.NewServer(Use(testReader()))
    defer tw.Close()
    defer tr.Close()

    c := &http.Client{}
    rs, err := c.Get(tw.URL)
    assert.NoError(t, err, "Should not contain any error")

    // Assign cookie to client
    url, err := rs.Location()
    fmt.Print(url)
    assert.NoError(t, err, "Should not contain any error")
    //c.Jar.SetCookies(url, rs.Cookies())

}

测试在第二部分失败,因为输出消息我已经

- FAIL: TestAuthorizationReader (0.05s)
 Location:       logged_test.go:64
 Error:          No error is expected but got http: no Location header in response
 Messages:       Should not contain any error

我无法获取URL位置指针,这里有什么问题?

1 个答案:

答案 0 :(得分:1)

Response.Location方法返回Location响应标头的值。您通常只希望看到此标题用于重定向响应,因此您发现此错误并不令人惊讶。

如果您想知道用于检索特定回复的网址,请尝试rs.Request.URL.String()。即使HTTP库遵循重定向来检索文档,这也将查看用于此特定响应的请求,这是您在确定cookie的来源时所遵循的。


如果您只是希望客户端跟踪由其处理的请求设置的cookie,您需要做的就是在客户端上设置Jar属性。像这样:

import "net/http/cookiejar"

...
c := &http.Client{
    Jar: cookiejar.New(nil),
}

现在,应在以后对同一来源的请求中设置先前响应中设置的cookie。