2016-08-03 49 views
2

我試圖從HTTP請求中獲取標頭。我試過echo他們,只是爲了得到一個編譯錯誤。我試過循環瀏覽頭文件。我的代碼是:無法從請求中獲取HTTP標頭

var packet = newMultipartData() 
packet["username"] = username 
packet["password"] = password 

var response = post(BASE & "users/login", multipart=packet) 
echo response.headers 

而我得到的錯誤是:Error: type mismatch: got (HttpHeaders)

+1

你得到了什麼錯誤? –

+1

@VaibhavBajaj哎呀,忘了包括。更新了問題。 – innectic

回答

2

想通了 - 原來我可以調用一個我從列表中選擇所需。例如:response.headers["X-CSRF-TOKEN"]

1

您的代碼不工作,因爲那裏是HttpHeaders沒有定義$ PROC原因:

let headers = newHttpHeaders() 
headers["foo"] = "bar" 
headers["foo2"] = "bar2" 
echo headers["foo"] # compiles 
echo headers   # does _not_ compile 

我們可以快速實現一個自己的$ PROC自己:

proc `$`(h: HttpHeaders): string = 
    result = "{" 
    for key, value in h: 
    if result.len > 1: result.add(", ") 
     result.add(key) 
    result.add(": ") 
    result.add(value) 
    result.add("}") 

實施基於https://github.com/nim-lang/Nim/blob/master/lib/pure/collections/tables.nim#L333。因爲HttpHeaders只是一個表的類型,所以我們可以簡單地重用現有的proc。

type 
    HttpHeaders* = ref object 
    table*: TableRef[string, seq[string]]