在身份验证墙背后生成PDF

Cho*_*rds 14 shell command-line wkhtmltopdf

我正在尝试使用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"
Run Code Online (Sandbox Code Playgroud)

用户名和密码都是在idname表单上输入字段.我正在显示my.jar文件,但没有写入任何内容.

具体问题:

  1. 我应该在任何地方指定登录页面和/或表单操作吗?
  2. -cookie-jar参数已经在各个地方提到过(无论是需要还是其他).如果有必要,它是如何工作的?我已经创建了my.jar文件但是如何再次使用它?引用:

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


编辑:

当然有人成功地做到了这一点?展示示例的好方法可能是有人愿意让它在一些需要登录凭据以消除潜在变量的流行网站上工作.

hsa*_*ers 12

每个站点的每个登录表单都不同.您要做的是通过阅读页面上的HTML(您可能已经知道)来确定您需要传递到该登录表单目标的所有内容.在用户名/密码字段之上可能需要一个额外的隐藏字段,以防止跨站点请求伪造.

cookie jar参数是一个文件,它存储从Web服务器返回的cookie.您需要在登录表单的第一个请求中指定它,并在后续请求中继续使用web服务器的cookie /会话信息登录后会回复你的.

总结一下:

  1. 查看并查看所需页面上是否还有其他参数.
  2. 确保您提交的URL与该页面上表单元素的ACTION属性相同.
  3. 在登录请求和第二个内容请求中使用--cookie-jar参数.
  4. --post参数的语法是--post username user_name_value --post password password_value


Cho*_*rds 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);
Run Code Online (Sandbox Code Playgroud)