2014-12-19 105 views
1

我寫了一個cookie getter和setter。現在我想測試它,並編寫了以下測試函數。用cookie測試請求

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

Response.Location方法返回Location響應標頭的值。你通常只會期望看到這個標題的重定向響應,所以你得到這個錯誤並不奇怪。

如果您想知道用於檢索特定回覆的網址,請嘗試rs.Request.URL.String()。即使HTTP庫遵循重定向來檢索文檔,它也會查看用於此特定響應的請求,這是您在確定Cookie的來源時所要執行的操作。


如果你只是希望客戶端跟蹤由它雖然處理請求設置cookie的,你應該需要做的是設置你的客戶機上的Jar屬性。類似這樣的:

import "net/http/cookiejar" 

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

現在在之前的響應中設置的cookie應該在將來的請求中設置爲相同的原點。

+0

我怎樣才能用cookie做請求呢? – 2014-12-19 11:51:38

+1

如果你在客戶端設置了'Jar'屬性(使用'net/http/cookiejar'中的實現),客戶端應該自動處理'Set-Cookie'響應頭,並添加適當的'Cookie'請求頭。 – 2014-12-19 11:55:01

+2

@zero_coding請求和響應確實包含設置和讀取cookie的方法。如果您使用帶有不遵循重定向的RoundTripper的客戶端,則可以非常輕鬆地檢查添加和檢查Cookie。如詹姆斯所建議的那樣,將它們塞入罐子中是最好的,如果你不想自己搗弄餅乾。 – Volker 2014-12-19 14:25:55