我正在尝试使用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
和name
。我正在显示my.jar文件,但没有写入任何内容。
具体问题:
http://code.google.com/p/wkhtmltopdf/issues/detail?id=356
编辑:
当然有人成功完成了这项工作?展示示例的好方法可能是有人愿意让它在一些需要登录凭据以消除潜在变量的热门网站上工作。
答案 0 :(得分:12)
每个网站的每个登录表单都不同。您要做的是通过阅读页面上的HTML(您可能已经知道)来确定您需要传递到该登录表单目标的所有内容。在用户名/密码字段之上可能需要一个额外的隐藏字段,以防止跨站点请求伪造。
cookie jar参数是一个文件,它存储从Web服务器返回的cookie。您需要在登录表单的第一个请求中指定它,并在后续请求中继续使用cookie /会话信息登录后网络服务器会给你回复。
总结一下:
答案 1 :(得分:8)
我认为我尝试登录的表单过于复杂。它是安全的,设置三个cookie,重定向两次,并在用户名和密码之外发布一些其他变量,其中一个需要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);
答案 2 :(得分:3)