无法从请求中获取 HTTP headers

Can't get HTTP headers from request

我正在尝试从 HTTP 请求中获取 headers。我试过 echoing 它们,只是为了得到一个编译错误。我也试过循环 headers 。我的代码是:

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)

想出来了 - 结果我可以从列表中调用我想要的那个。例如:response.headers["X-CSRF-TOKEN"]

您的代码无法运行的原因是没有为 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 只是一个 table 的类型,我们可以简单地重用现有的 proc。

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