8

wkhtmltopdfに問題があります。ユーザー名/パスワードページがあるWebサイトのページのPDFスナップショットを撮るために使用しています。.exeを実行すると、ログインページのスナップショットが表示されます(自分のASP.NETアプリからexeを実行します)。

スナップショットを撮るのに必要なページにアクセスできるように、wkhtmltopdfをサイトにログインさせる方法を知っている人はいますか?

wkhtmltopdfは、サーバーのプログラムファイルディレクトリにインストールされ、次の方法で呼び出されます。

public void HtmlToPdf(string website, string destinationFile)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = "wkhtmltopdf.exe";
        startInfo.Arguments = website + " " + destinationFile;
        Process.Start(startInfo);
    }

ありがとう!-ダン


答え

--cookie-jarメソッドを機能させることができませんでした(コメントを参照)が、クエリ文字列にユーザー名/パスワードを使用してプログラムでログインする別の方法を見つけました。

ユーザー名/pwをクエリ文字列のparamsとして渡し、wkhtmlを使用して目的のページにアクセスしようとします。メンバーシッププロバイダーがログインページに私を追い出すとき、私はコードビハインドを介してパラメーター(URLにreturnUrlパラメーターとして保存されている)にアクセスし、自分自身を認証します。単純なresponse.redirectとbingo-PDFスナップショットがあります。

// Check to see if an outside program is trying
// to log in by passing creds in the querystring.
if (Request.QueryString["username"] != null) &&
    Request.QueryString["password"] != null))
{ 
    string user = Request.QueryString["username"];
    string pw   = Request.QueryString["password"];
    if (System.Web.Security.Membership.ValidateUser(user, pw))
    {
        // Create an authentication ticket for wkhtml session
        System.Web.Security.FormsAuthentication.SetAuthCookie(user, false);
        if (Request.QueryString["ReturnUrl"] != null)
        {
            Response.Redirect(Request.QueryString["ReturnUrl"]);
        }
    }
    else 
    {
        throw new Exception("You failed to log in.");
    }
}
4

4 に答える 4

2

まず、ログインフォームで使用されている投稿パラメータを確認してから、-post username xxx --postpasswordxxxを試してください。または、wiresharkを使用してログインプロセスを記録し、投稿されたパラメータを確認します。

ログインしたら、-cookie-jarを使用します

ここでより良い説明を参照してくださいhttp://wkhtmltopdf.org/

保護されたページを変換するためにwkhtmltopdfを取得するのは難しい場合があります。--extended-helpも使用して、ログインに使用できる他のパラメーターを確認します。たとえば、サイトが基本認証で保護されている場合は、-user--passwordを使用するとかなり簡単になります。

于 2011-02-23T08:49:57.847 に答える
1

誰かがまだ答えを探しているなら、私はそれを機能させるために私がしたことの簡単な要約を書きます。

まず、ログインするページを調べます。たとえば、http:/www.example.com/login

ユーザー名/パスワードの入力を囲むフォームを探します。私の場合、Railsフォームにログインしていたので、真正性トークンも必要でした。ログイン入力の名前と値を取得したら、次のように最初のwkhtmltoimage呼び出しを行うことができます。

wkhtmltoimage --cookie-jar my.jar --post username steve --post password iscool http://www.example.com/login dummy.jpg

railsフォームの場合、postパラメーターとしてauth_tokenも渡す必要がありました。次に、表示するメインページにアクセスするときに、そのCookiejarを再利用します。

wkhtmltoimage --cookie-jar my.jar http://example.com/myprofile screenshot.jpg

于 2014-03-07T02:34:56.617 に答える
0

もう1つの方法は、Webサイトのビューをhtml文字列にレンダリングし、一時的にローカルファイルに保存することです。次に、wkhtmltopdfを使用してそのhtmlファイルをPDFに変換し、後でそのローカルファイルを削除します。このように、MVCの認証を処理する必要はありません。

于 2014-10-13T16:40:46.303 に答える
0

ASP.Netフォーム認証で動作するアプリケーションでも同様の問題が発生しました。これを機能させるには、このような認証Cookieを渡す必要がありました。

--cookie <name> <value>       

重要な注意点は、認証Cookie以外に追加のCookieを渡してはならないということです。一部のCookieは認証に失敗しますが、失敗しない場合でも、wkhtmlは渡された各Cookieを処理する必要があるため、wkhtmlプロセスの速度が低下します。

于 2019-01-10T19:53:49.207 に答える