【问题标题】:wkhtmltopdf and forms based authenticationwkhtmltopdf 和基于表单的身份验证
【发布时间】:2011-10-24 13:53:03
【问题描述】:

我有一个使用基于表单的身份验证的应用程序。我正在尝试复制应用程序中的页面并使用 wkhtmltopdf 将其保存为 PDF。

wkhtmltopdf 已安装并且工作正常。我可以在应用程序中成功调用它来生成另一个网站的 PDF 而无需身份验证(即 bbc.co.uk)。

我无法让它将用户名/密码传递给应用程序以生成所需页面的副本。相反,我得到了登录屏幕的 PDF。

客户端和服务器都是 Windows(分别是 7 和 2008)。我正在使用命令:

wkhtmltopdf.exe --post userid=xxx --post pwd=yyy --ignore-load-errors http://url.com/blah/blah/test.pdf

xxx 是我的用户名,yyy 是我的密码。我已经浏览了登录页面的来源,表单字段的 id 是 userid 和 pwd,所以我相信我在命令行中的 post 参数是正确的。

在彻底谷歌搜索后,我可以看到提及 --cookie-jar 参数,但还没有设法弄清楚它的用法,或者即使它会有所帮助。

谢谢

邓肯

【问题讨论】:

    标签: pdf-generation wkhtmltopdf


    【解决方案1】:

    如果您使用的是 ASP.NET 表单身份验证,则可以通过一系列 --cookie 参数将当前用户的身份验证 cookie 转发到 wkhtmltopdf。这是假设经过身份验证的用户(您可以从中获取身份验证 cookie)正在触发 PDF 打印输出。

    注意:这不是从 .NET 应用程序启动 wkhtmltopdf.exe 的完整工作代码,而只是如何将 cookie 传递给 wkhtmltopdf 的示例。

    有关从 .NET 启动 wkhtmltopdf.exe 的示例,请参阅:how to pass html as a string using wkhtmltopdf?

    ProcessStartInfo psi = new ProcessStartInfo();
    psi.FileName = "wkhtmltopdf.exe";
    
    string cookieArgs = "";
    var cookies = HttpContext.Current.Request.Cookies;
    
    if (cookies != null)
    {
        var sb = new System.Text.StringBuilder();
    
        // you probably only need the ".ASPXFORMSAUTH" 
        // and "ASP.NET_SessionId" cookies
        // but I pass everything just in case
        foreach (string key in cookies.AllKeys)
        {
            string value = cookies[key].Value;
            sb.AppendFormat("--cookie {0} {1} ", key, value);                    
        }
        cookieArgs = sb.ToString();
    }
    
    psi.Arguments = urlToPrint + " -q " + cookieArgs + " -"; 
    Process.Start(psi);
    

    【讨论】:

      【解决方案2】:

      此问题现已解决。我使用的是 0.9.9 版,但无法正常工作。一旦我迁移到 0.10.0 rc2 版本,它就可以正常工作了。

      如果其他人在尝试同样的事情,我使用的代码行如上,我不需要 --cookie-jar 参数。

      【讨论】:

      • --post user=xxx --post pw=yyy 对您有用吗?每当我尝试像这样指定 post 参数时,我都会收到一条消息说Unknown switch -o(我在 Linux 上尝试过,而不是在 Windows 上尝试过)
      • 我得到的只是帮助文本。
      • @acme 语法其实是--post user xxx,不要加=符号。现在为我工作。
      猜你喜欢
      • 2014-12-13
      • 2012-07-12
      • 2018-06-08
      • 2015-02-06
      • 2010-11-20
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多