我写了一个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位置指针,这里有什么问题?
答案 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。