PDF打印受密码保护的页面(理想情况下,使wkhtmltopdf使用cookie)

时间:2013-02-11 04:53:13

标签: python cookies mechanize wget wkhtmltopdf

我正在尝试使用wkhtmltopdf将受密码保护的页面打印为PDF,但我无法加载(工作)Cookie,这意味着我总是只打印“登录”页面。

在登录后保存cookie

以下代码按预期工作:如果我登录,我可以查看正确的页面,无论是从cookie加载还是输入我的登录信息:

class PrintPages(object):
    def __init__(self):
        ...
        self.browser = mechanize.Browser()
        self.cj = mechanize.MozillaCookieJar()
        self.browser.set_cookiejar(self.cj)
        self.login("cookies.txt")

    def login(self, cookie_jar):
        """ Log in, save cookie if doesn't exist. Otherwise, load cookie. """
        if os.path.isfile(cookie_jar):
            self.cj.load(cookie_jar, ignore_discard=True, ignore_expires=True)
        else:
            self.browser.open(self.login_url)

            self.browser.select_form(name="loginform")
            self.browser["username"] = self.username
            self.browser["password"] = getpass.getpass()

            self.browser.submit()
            self.cj.save(cookie_jar, ignore_discard=True, ignore_expires=True)

(cookie.txt的)

    # Netscape HTTP Cookie File
    # http://www.netscape.com/newsref/std/cookie_spec.html
    # This is a generated file!  Do not edit.

sub.example.com  FALSE   /   TRUE        JSESSIONID  B8307A77925DB287B0346C728BBF8F24

但是,告诉wgetwkhtmltopdf加载Cookie会为我提供登录页面。

$ wget -p --load-cookies cookies.txt sub.example.com/page.html
$ wkhtmltopdf --cookie-jar cookies.txt sub.example.com/page.html page.pdf

是什么给出的?理想情况下,任何允许我打印到PDF的解决方案都是理想的,但我很好奇这里发生了什么。


我正在使用:

  • wkhtmltopdf版本0.9.9
  • mechanize:版本0.2.5

1 个答案:

答案 0 :(得分:3)

我没有针对您的特定Cookie问题的解决方案,但我们使用权限打印pdf所做的工作是:

  1. 公开单独的视图,无需登录身份验证。
  2. 为要生成的pdf创建一个使用令牌。
  3. 在没有身份验证的视图中,确保密钥正确,并且尚未使用。如果令牌有效,则返回html以转换为pdf。
  4. 如果您的视图需要知道哪个用户请求pdf(以某种方式自定义页面),您可以将用户ID与令牌一起存储在数据库中。
  5. 我们正在寻找一种更好的方法,但到目前为止它对我们有用。

    希望这有帮助。

相关问题