在tcl中格式化HTTP响应头
今晚我刚开始和tcl打交道,我已经跨过了第一关。这是我的密码:在tcl中格式化HTTP响应头,tcl,httpresponse,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 -q
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。我不知道怎么做
我尝试使用rest软件包,但也无法实现:
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
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 [lindex [nessus::login -username admin -password myPassword] 1]
我假设这可能比http代码更容易格式化
在Python中,我可以通过从json中提取“token”来检索该令牌键,但我不确定如何在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命令,但从长远来看,使用字典访问可能是更好的做法
文档:,包,您可以尝试以下代码:
% puts $token
token ba9c5b4256ef701bf7d8ae151c01261cb8a3267f1b8c2787
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 [lindex [nessus::login -username admin -password myPassword] 1]
Tcl开局不错。“我很想听听您学习该语言的动机,以及您对该语言的印象。”glennjackman一位客户周四打电话来寻求我们API的支持。我对curl和Python的API有相当好的理解,只是想帮助客户。我想这将是一个不错的周末项目:。至于我的印象,到目前为止,我很喜欢它,我想一旦我学会了更多的语法,我会非常喜欢它。我喜欢把我所有的电话都组织成自己的方式,在tcl中仍在努力,但我会掌握窍门的。这非常有效!在获取更多命令以使用令牌时遇到一些问题,但重要的是我将其存储起来。非常感谢。我只能将其中一个标记为正确,但我想让您知道,您的代码也适用于我代码的其余部分!