如何使用tcl http包将cookie信息设置为标头

如何使用tcl http包将cookie信息设置为标头,http,tcl,Http,Tcl,我创建了一些头来登录服务器, 登录到服务器后,我使用下面的标题使用geturl操作将一个页面移动到另一个页面,但问题是我注销了服务器,我没有进一步移动 我以为它丢失了饼干信息 set headers(Accept) "text/html\;q=0.9,text/plain\;q=0.8,image/png,*/*" set headers(Accept-Language) "en-us,en\;q=0.5" set headers(Accept-Charset) "ISO-8859-1,utf-

我创建了一些头来登录服务器, 登录到服务器后,我使用下面的标题使用geturl操作将一个页面移动到另一个页面,但问题是我注销了服务器,我没有进一步移动

我以为它丢失了饼干信息

set headers(Accept) "text/html\;q=0.9,text/plain\;q=0.8,image/png,*/*"
set headers(Accept-Language) "en-us,en\;q=0.5"
set headers(Accept-Charset) "ISO-8859-1,utf-8\;q=0.7,*\;q=0.7"
set headers(Proxy-Authorization) "[concat \"Basic\" [base64::encode $username:$password]]"
我不知道如何将cookie信息设置为标题,有人可以解释一下

谢谢
Tcl中的Malli

Cookie支持目前异常原始;在我们的系统中,我有95–99%的修复,但这对您没有多大帮助。但是为了直接处理会话cookie进行登录,您可以“游击队黑客”它

发送cookie 要向服务器发送cookie,您需要发送标题
cookie:thecookiestring
。这是通过将
-headers
选项传递到
http::geturl
来完成的,该选项有一个描述传递内容的字典。我们可以很简单地从阵列中获得:

set headers(Cookie) $thecookiestring
set token [http::geturl $theurl -headers [array get headers]]
# ...
收到饼干 这绝对是容易的一点。更难的是,在执行登录操作时,还需要检查响应中的
Set Cookie
头。您可以通过
http::meta
获得它,然后使用
foreach
遍历列表:

set thecookiestring ""
set token [http::geturl $theloginurl ...]
if {[http::ncode $token] >= 400} {error ...}
foreach {name value} [http::meta $token] {
    if {$name ne "Set-Cookie"} continue
    # Strip the stuff you probably don't care about
    if {$thecookiestring ne ""} {append thecookiestring "; "}
    append thecookiestring [regsub {;.*} $value ""]
}
从形式上讲,可以有很多cookie,它们具有各种复杂的特性。处理它们是我在化石分支的工作

我假设您不需要忘记cookies、管理持久存储或其他类似的复杂性。(毕竟,这些是正常登录会话可能不需要的东西。)

我用这个工具解决了这个问题


感谢大家

关于为什么要注销,这在很大程度上取决于服务。没有更多的信息就无法回答。