在tcl 8.0中使用http post方法获取url

时间:2012-08-28 08:58:53

标签: http post tcl

我正在尝试使用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)"                                             
}      

1 个答案:

答案 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。