4

パスワードで保護されたページを で PDF に印刷しようとしてwkhtmltopdfいますが、(動作中の) 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)

(cookies.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

ただし、wgetまたはwkhtmltopdfCookieをロードするように指示すると、ログインページが表示されます。

$ 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
4

1 に答える 1

3

特定の Cookie の問題に対する解決策はありませんが、権限付きで PDF を印刷するために行ったことは次のとおりです。

  1. ログイン認証なしで別のビューを公開します。
  2. 生成する PDF の使い捨てトークンを作成します。
  3. 認証なしのビューで、キーが正しく、まだ使用されていないことを確認します。トークンが有効な場合は、html を返して pdf に変換します。
  4. ビューがどのユーザーが pdf を要求しているかを知る必要がある場合 (何らかの方法でページをカスタマイズするため)、ユーザー ID をトークンと共にデータベースに保存できます。

これをドンするより良い方法を探していますが、今のところうまくいっています。

お役に立てれば。

于 2013-02-20T02:26:00.873 に答える