2012-04-23 8 views
12

私は最初にログインする必要があるWKHTMLTOPDFを使用してPDFを生成しようとしています。既にインターネット上でこれがいくつかありますが、私は働いているようです。私はターミナルにいます - 何も気にしません。認証壁の背後にあるPDFを生成する

私は(他のものの全体の多くの間で)試してみた:

/usr/bin/wkhtmltopdf --post username=myusername --post password=mypassword "URL to Generate" test.pdf 

/usr/bin/wkhtmltopdf --username myusername --password mypassword "URL to Generate" test.pdf 

/usr/bin/wkhtmltopdf --cookie-jar my.jar --post username=myusername --post password=mypassword "URL to Generate Cookie For" 

ユーザー名とパスワードは、フォームの入力フィールドのidnameの両方です。 my.jarファイルが表示されていますが、何も書き込まれません。

具体的な質問:

  1. 私はどこでもログインページおよび/またはフォームアクションを指定する必要がありますか。
  2. --cookie-jarパラメータは、(必要であるかそうでないかの両方の)さまざまな場所で言及されています。それが必要なのであれば、どのように機能するのですか? my.jarファイルを作成しましたが、もうどのように使用しますか?参照:

http://code.google.com/p/wkhtmltopdf/issues/detail?id=356


EDIT:

はきっと誰かがこれを正常に行っていますか?例を紹介する良い方法は、潜在的な変数を排除するためにログイン資格情報を必要とする一般的なWebサイトで働かせたい場合です。

答えて

8

password_value --postパスワードus​​er_name_value --postユーザ名です。 3つのクッキーを設定し、2回リダイレクトし、ユーザ名とパスワードの外に他の多くの変数をポストします。そのうちの1つはクッキー値を必要とします(私はポスト変数に値を連結しようとしました。これはおそらくかなりまれな問題です.WKHTMLTOPDFの欠陥では決してありません。

CURLを使用してログインし、ローカルファイルにページを書き込んだ後、WKHTMLTOPDFをそれに対して実行しました。確かに同様の問題を抱えている誰かのための確かな解決策。


編集:あなたはphantomjsでPDFにレンダリングしようとしていることに興味があるかもしれない

curl_setopt($ch, CURLOPT_HEADER, 1); # Change to 1 to see WTF 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
curl_setopt($ch, CURLOPT_URL, $loginUrl); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
+0

あなたのトリックを行ったこのcURL構文を概説すると、はるかに役立つでしょう。 –

+0

こんにちはIfedi、私の特定の実装が実際にあなたのユースケース(私のニーズに特有のポストストリングであり、PHPを介して実装されています)に役立つかどうかはわかりませんが、追加しました。 – Chords

12

すべてのログインフォームはサイトごとに異なります。あなたがしたいことは、ページ上のHTMLを読んで、ログインフォームのターゲットに渡す必要があるものが何であるかを判断することです。クロスサイト要求の偽造を防ぐために、ユーザー名/パスワードフィールドの上に追加の隠しフィールドが追加されることがあります。

cookie jarパラメータは、Webサーバから戻ってきたクッキーを保存するファイルです。ログインフォームへの最初のリクエストでそれを指定する必要があります。その後、クッキー/セッションの使用を続けるリクエストで指定する必要があります。

  1. ルックをし、必要なページ上の任意の追加パラメータがあるかどうかを確認:ウェブサーバは、だから、それを合計する

    ログイン後に戻ってあなたを与えているだろうという情報。

  2. 送信しているURLが、そのページのフォーム要素のACTION属性と同じであることを確認してください。
  3. ログイン要求と2番目のコンテンツ要求の両方で--cookie-jarパラメータを使用します。
  4. --postパラメータの構文は、私は私がログインしようとしているフォームが複雑すぎると思う
+0

ありがとうございます。私は別のルートを取って巻いても答えはしっかりしているようです。答える時間をとってくれてありがとう! – Chords

+0

@コード問題はありません。私は数回前にwkhtmltopdfを使ってきました。あなたが説明したような、もっと複雑なケースだと思うのですが、それは使用するのに苦痛です。あなたのフォローアップで言及したリダイレクトをどのように扱うかわからない、それに対処する必要はありません。 – hsanders

3

:CURL、興味を持っている場合。

rasterize.js hereがあります。基本的には、ログインページにログインするためのjavascriptを書いてからPDFを作成します。

ただし、出力はwkhtmltopdfと同じではありません。 HTMLをファイルに保存してから、phantomjsのPDF出力がひどい場合は、wkhtmltopdfでレンダリングするだけです。

関連する問題