2

我正在尝试使用 tcl 8.0 中的 post 方法获取一些 url。

它不打印任何输出。

这是我的代码块。

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)"                                             
}      
4

1 回答 1

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。

于 2012-08-28T11:57:32.933 回答