我正在尝试使用tcl 8.0中的post方法获取一些网址。
它不会打印任何输出。
这是我的代码的一部分。
foreach sKey [array names aQuery] {
set sValue $aQuery($sKey)
append sQueryString "[::http::formatQuery $sKey $sValue]&"
}
set sQueryString [string trim $sQueryString "&"]
set sToken [::http::geturl $sUrl -query $sQueryString -channel stdout]
::http::wait $sToken
upvar #0 $sToken state
foreach sKey [array names state] {
puts "$sKey $state($sKey)"
}
答案 0 :(得分:4)
已升级。你为什么要使用上一个千禧年发布的版本。
http :: formatQuery过程将一个或多个键值对作为参数,以便更好地呈现部分,如下所示。如果有疑问,最好避免使用-channel选项并自己检查状态。如下所示:
set query [eval ::http::formatQuery [array get aQuery]]
set tok [http::geturl $sUrl -query $query -timeout 10000]
http::wait $tok
if {![string compare [http::status] "ok"]} {
puts [http::data $tok]
} else {
puts stderr [http::error $tok]
}
http::cleanup $tok
请注意,在更新版本的tcl中,您可以使用[http::status] eq "ok"
或[string equal [http::status] "ok"]
。不要忘记清理http令牌。如果您在GUI程序中执行此操作,请使用-command选项并在回调中执行所有工作,以便在执行http :: wait时不冻结UI。