【发布时间】:2023-03-30 15:54:02
【问题描述】:
我正在开发一个网络工具,但在设置 cookie 时遇到了一些问题。 20 年前我曾经在 Perl 中执行此操作,但我感到震惊的是,在 2017 年似乎没有一种清晰干净的方式来使用 Python 处理 cookie!我认为简单快捷的事情已经花费了一整天。我已经尝试过手动设置 cookie,使用 requests 模块,以及我在 Stack Overflow 上找到的大量部分代码示例。在我所见的任何地方,文档都很差,没有完整的工作示例,或者答案很旧。
我正在用 Python 创建一个 cgi 脚本。在脚本的登录页面上,我有 print "Content-type: text/html\r\n" 以便在网页上显示一个文本框和选择菜单。当用户单击提交时,我有一个验证步骤,如果出现错误,需要在页面上打印一些内容。如果没有错误,我需要脚本来加载一个新页面并设置一个 cookie。
这是我用来设置 cookie 的代码:
#!C:\Python27\python.exe -u
import Cookie
c = Cookie.SimpleCookie()
c['id'] = '12345'
c['score'] = '8.76'
c['page'] = '3'
print "Content-type: text/html %s;\r\n" % (c)
print ""
print c
问题是:
- 当我在自行运行上述代码后在 Firefox 中选中“显示 Cookie”时,上面显示的三个 c 值中只有两个存储为 cookie。
- 我在脚本中登陆的页面顶部显示
Content-type: text/html Set-Cookie: score=8.76 Set-Cookie: id=12345 Set-Cookie: page=3 ;,这是由于使用打印语句设置cookie并再次发送内容类型。发生这种情况时,我的浏览器中不会存储任何 cookie。仅当标头中还没有Content-type: text/html时才会存储 Cookie。
有没有办法在我的脚本中设置 cookie 而无需在浏览器中打印另一个 Content-type: text/html 副本?
我还需要一种在用户在工具中四处移动时无缝更新 cookie 的方法。例如,当他们点击下一页时,cookie 会更新为下一页的页码。
我在 Windows 10 上使用 Python 2.7,并使用 Firefox 作为我的测试浏览器。
【问题讨论】: