2012-04-23 102 views
12

我正在嘗試使用WKHTMLTOPDF生成PDF,這需要我先登錄。互聯網上有一些關於此的內容,但我似乎無法獲得我的工作。我在碼頭 - 沒什麼特別。在身份驗證牆上生成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文件來顯示,但沒有寫入它。

具體的問題:

  1. 我應該指定登錄頁面和/或表單動作地方?
  2. 的--cookie-罐參數已在不同的地方已經提到(既作爲被需要和其他)。如果有必要,它是如何工作的?我創建了my.jar文件,但是如何再次使用它?引用:

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


編輯:

肯定有人已經成功地做到了這一點?展示一個示例的好方法可能是,如果有人願意讓它在需要登錄憑證以消除潛在變量的一些熱門網站上運行。

回答

8

我想我試圖登錄到形式過於複雜。這是安全的,設置三個cookie,重定向兩次,並在用戶名和密碼之外發布一些其他變量,其中一個需要cookie值(我甚至嘗試將值鏈接到post變量中,但沒有運氣)。這可能是一個非常罕見的問題 - 絕不是WKHTMLTOPDF的錯。

我使用CURL登錄並將頁面寫入本地文件,然後針對該文件運行WKHTMLTOPDF。對於有類似問題的任何人來說,這絕對是一個可靠的解決方案。


編輯:捲曲,如果有興趣:

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); 
+0

對於爲您製作技巧的cURL語法進行概述會更有幫助。 – 2016-09-19 17:24:06

+0

嗨ifedi,不知道我的具體實現實際上會有助於您的用例(這是特定於我的需求,並通過PHP實現的後字符串),但我添加它,所以希望它可以幫助。 – Chords 2016-09-20 15:22:52

12

每次登錄形式將是每個站點不同。你要做的是通過閱讀頁面上的HTML(你可能知道)來確定你需要傳遞給登錄表單的目標。它可能需要在用戶名/密碼字段的頂部添加一個隱藏字段以防止跨站點請求僞造。

cookie jar參數是一個文件,它存儲它從web服務器獲取的cookie。您需要在登錄表單的第一個請求中指定它,並在隨後的請求中繼續使用cookie/session 。信息,在登錄後的Web服務器會已經給你回

所以總結起來:

  1. ,看看是否有需要在頁面上的任何其他參數。
  2. 確保您提交的URL是相同網頁上表單元素的action屬性。
  3. 使用--cookie-罐參數在這兩個登錄請求和第二內容請求。
  4. 爲--post參數的語法是--post用戶名user_name_value --post密碼password_value
+0

謝謝,hsanders。即使我結束了採取另一條路線,你的答案看起來很穩固。感謝您抽出時間回覆! – Chords 2012-05-03 13:19:24

+0

@Chords沒問題。我之前使用過wkhtmltopdf。我認爲對於一個更復雜的案例,就像你所描述的那樣,使用它有點痛苦......我不確定它是如何處理你在跟蹤中提到的重定向,從來沒有處理過。 – hsanders 2012-05-04 18:52:45

3

你可能有興趣嘗試呈現爲PDF phantomjs

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

你可以找到rasterize.js here。基本上,你寫一些JavaScript來登錄登錄頁面,然後你做PDF創建。

但是,輸出與wkhtmltopdf不一樣。您可以將HTML保存爲文件,然後使用wkhtmltopdf進行渲染,如果phantomjs PDF輸出太糟糕。