我创建了一些登录服务器的标头, 登录到服务器之后,我使用以下标题使用geturl操作将一个页面移动到另一个页面,但是我登出服务器的问题我没有进一步深入。
我认为它缺少了cookie信息。
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信息设置到标题中。
由于 Malli
答案 0 :(得分:0)
Tcl中的Cookie支持目前非常原始;我的fossil repository中有95-99%的修复,但这对你没什么帮助。但是为了直接处理用于登录目的的会话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 ""]
}
遍历列表:
{{1}}
正式地,可以有许多cookie,它们具有各种复杂的功能。处理它们就是我在化石分支中所做的工作......
我假设您不需要忘记cookie,管理持久存储或其他此类复杂性。 (毕竟,它们是您正常登录会话可能不需要的东西。)
答案 1 :(得分:0)
我使用此工具Fiddler
解决了问题全部谢谢