无法从请求中获取 HTTP headers
Can't get HTTP headers from request
我正在尝试从 HTTP 请求中获取 headers。我试过 echo
ing 它们,只是为了得到一个编译错误。我也试过循环 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]]
我正在尝试从 HTTP 请求中获取 headers。我试过 echo
ing 它们,只是为了得到一个编译错误。我也试过循环 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]]