13

WKHTMLTOPDFを使用して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"

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

具体的な質問:

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

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


編集:

確かに誰かがこれを成功させましたか?例を紹介する良い方法は、潜在的な変数を排除するためにログイン資格情報を必要とする人気のあるWebサイトで誰かがそれを喜んで動作させる場合です。

4

3 に答える 3

11

すべてのログインフォームは、サイトごとに異なります。あなたがしたいことは、ページ上のHTML(おそらくあなたが知っている)を読むことによって、そのログインフォームのターゲットに渡す必要があるすべてを決定することです。クロスサイトリクエストフォージェリを防ぐために、ユーザー名/パスワードフィールドの上に追加の非表示フィールドが必要になる場合があります。

cookie jarパラメータは、Webサーバーから返されるCookieを格納するファイルです。ログインフォームへの最初のリクエストで指定する必要があります。その後のリクエストでは、WebサーバーがCookie/セッション情報を引き続き使用するように指定する必要があります。ログイン後に返送されます。

要約すると、次のようになります。

  1. ページに必要な追加のパラメーターがあるかどうかを確認してください。
  2. 送信するURLが、そのページのフォーム要素のACTION属性と同じであることを確認してください。
  3. ログインリクエストと2番目のコンテンツリクエストの両方で--cookie-jarパラメータを使用します。
  4. --postパラメーターの構文は次のとおりです。--postusernameuser_name_value --post password password_value
于 2012-05-01T15:49:48.670 に答える
9

ログインしようとしているフォームが複雑すぎると思います。安全で、3つのCookieを設定し、2回リダイレクトし、ユーザー名とパスワード以外の多くの変数を投稿します。そのうちの1つにはCookie値が必要です(値をpost変数に連結しようとしましたが、運がありません)。これはおそらく非常にまれな問題です-決してWKHTMLTOPDFのせいではありません。

CURLを使用してログインし、ページをローカルファイルに書き込んでから、それに対してWKHTMLTOPDFを実行しました。同様の問題を抱えている他の人にとっては間違いなく確実な回避策です。


編集:興味がある場合はCURL:

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);
于 2012-05-02T19:15:13.870 に答える
4

phantomjsを使用してPDFにレンダリングすることに興味があるかもしれません。

phantomjs rasterize.js http://blah.com/ webgl.pdf

ここでrasterize.jsを見つけることができます。基本的には、ログインページにログインするためのJavaScriptを記述してから、PDFを作成します。

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

于 2012-05-03T03:36:12.983 に答える