执行http :: geturl时命令名称“zlib”无效

时间:2013-09-02 19:13:56

标签: http-headers tcl zlib

我正在使用TCL 8.5(无法升级)并运行HTTP包的2.7.7版。我正在调用一个库,它似乎使用以下http :: geturl命令来下载已经gzip压缩的图像:

http::geturl $url -headers {Accept-Encoding gzip} 

我收到了这个错误:

invalid command name "zlib"

在网上搜索,我只能找到这个错误的引用,基本上建议停止发送我不能做的Accept-Encoding gzip(我也不能升级到8.6)http://sourceforge.net/p/tcl/bugs/4784/

我的问题是:此问题是否有8.5种解决方法?有没有办法阻止这个库发送“Accept-Encoding gzip”标题?

1 个答案:

答案 0 :(得分:1)

问题是代码认为你有zlib包(提供zlib命令)可用,因此开启了对gzip压缩流的支持。代码中最简单的修复方法是:

package require zlib

只要在调用执行http::geturl的代码之前发生这种情况,这就足够了。

如果你没有这个软件包(在这种情况下你会从package require得到明显的失败)那么你就遇到了一个错误:http包中的软依赖代码正在获取它构建请求标头时,或者在发送gzip压缩数据的服务器中,尽管没有被要求,但是错误。从TIP #234(即http://svn.scheffers.net/zlib处的SVN存储库)指向的代码包含zlib包版本的源代码,特别是它是构成内置支持的起点的版本在Tcl 8.6中,但我认为它只使用Tcl 8.5 API。

无益,zlib包有几个版本;这是最容易获得的Tcl软件包之一,唉。