2017-10-09 202 views
1

有一个小代码应该向网站发送请求并接收回复。我只懂语言,不懂如何去做。 以下是使用http get方法发送请求的代码片段。如何在TCL中的http获取查询中获得响应

#!/usr/bin/expect 

set id [open file.txt w] 
set tok [::http::geturl "https://example.com/reques.php?=somedate -timeout 2000 -channel $id] 
::http::cleanup $tok 
close $id 
set id [open file.txt] 
set phone [read $id] 
close $id 
puts $phone 

但在执行代码时,我得到

invalid command name "http::geturl" 
    while executing 

回答

1

的HTTP包需要被加载到你的Tcl解释的错误;它不是默认的。因此,在你的脚本(略低于#!线)的上面放:

package require http 

事实上,它通常是一个好主意,说明每一个你依赖于这种方式包装,因为它可以很容易地看到的一切(您可以选择指定您期望的版本):

#!/usr/bin/expect 

# At least Tcl 8.5; 8.6 will be fine too 
package require Tcl 8.5 

# Any version of Expect 
package require Expect 

# Any version of the http package that supports the v2 API 
package require http 2 

包名称区分大小写。你可以

+0

非常感谢,Donal!现在我将更多地了解TCL语言。 我试着按你写的做,我得到格式为html的页面文本,然后我以get的格式发送请求,并等待来自站点的响应与某些数据,然后我必须解读。如果我通过curl bash脚本向我发送获取请求,数据来自网站,那么我如何在Tcl中执行相同的操作?现在,我在页面正文中收到错误301,可能是因为它是https上的网站? – Lefeofan

+0

我试图用你的例子为https的另一个用户,我得到一个错误“找不到软件包tls” – Lefeofan

+0

'tls'软件包(这是加密通信所需的SSL支持)在其他地方可用,但这是这里是一个单独的问题的领域。另外,我怀疑这是以前必须回答的问题。 –