2016-08-03 51 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]]