tcl - 在 tcl 中格式化 HTTP 响应 header

标签 tcl httpresponse

今晚我刚刚开始搞乱 tcl,并且遇到了第一个障碍。这是我的代码:

package require http
package require tls

::http::register https 443 ::tls::socket

set url https://127.0.0.1:8834/session
set body [http::formatQuery username admin password myPassword]
set login [http::geturl $url -query $body]
set authToken [http::data $login]

http::cleanup $token

这是代码运行后 authToken 的样子:

% puts $authToken
{"token":"d52e61030d93824128cea67e2b99dde6f3fd61b25e9a0440"}

我只需要存储 d52e61030d93824128cea67e2b99dde6f3fd61b25e9a0440 。我不知道该怎么做。

我尝试使用其余包,但我也无法让它工作:

package require rest
package require tls

::http::register https 443 ::tls::socket

set nessus(login) {
    url https://127.0.0.1:8834/session
    method POST
    req_args {username: password:}
}

rest::create_interface nessus

set token [nessus::login -username admin -password myPassword]

这是我运行此代码的输出:

% puts $token
token ba9c5b4256ef701bf7d8ae151c01261cb8a3267f1b8c2787

我猜想,这可能比 http 代码更容易格式化。

在 Python 中,我能够通过从 json 中提取“token”来检索该 token key ,但我不确定如何在 tcl 中实现这一点。

最佳答案

您收到的响应采用 json 对象的形式,具有一个键和一个值。您可以使用 json 包将其转换为 Tcl dict 结构:

package require json
::json::json2dict [http::data $login]
# -> token d52e61030d93824128cea67e2b99dde6f3fd61b25e9a0440

rest 包自动检测 xml 和 json,并且显然在传递之前将接收到的对象转换为 dict

您可以通过普通字典访问来获取值:

dict get $token token
# -> ba9c5b4256ef701bf7d8ae151c01261cb8a3267f1b8c2787
# or
dict get [::json::json2dict [http::data $login]] token
# -> d52e61030d93824128cea67e2b99dde6f3fd61b25e9a0440

也可以使用 lindex 命令,但从长远来看,使用字典访问可能是更好的做法。

文档:dict , http , json包,lindex , package

关于tcl - 在 tcl 中格式化 HTTP 响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32775676/

相关文章:

tcl - 如何在TCL代码中查找错误

apache - 尝试为丢失的文件强制使用状态代码 200 的 RewriteRule 重定向

c# - Request.CreateResponse 与response.Content?

linux - 请帮助我简单的 tcl 代码

c# - ASP.Net MVC2 (RTM) 中断响应过滤 - "Filtering is not allowed"

java - 在 Java web 中编写 header 的正确方法具有多个值

c# - 我什么时候应该将 HttpResponse.SuppressContent 设置为 true

javascript - 如何将[object Object]传递给JS函数

linux - 期望脚本 - 期望 2 个条件并从 bluetoothctl 中提取 MAC 添加

linux - 解析来自 expect 命令的信息