2012-04-23 2 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-jar 매개 변수는 여러 위치에서 필요하거나 다른 것으로 언급되었습니다. 그게 필요하다면 어떻게 작동할까요? my.jar 파일을 만들었지 만 어떻게 다시 사용합니까? 참조 :

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


편집 :

은 분명히 누군가가 성공적으로 이런 짓을했다? 예를 보여주는 좋은 방법은 잠재적 인 변수를 제거하기 위해 로그인 자격 증명이 필요한 인기있는 웹 사이트에서 누군가가 작동하도록하려는 경우 일 수 있습니다.

답변

8

password_value 비밀번호 --post --post 사용자 이름 user_name_value 있습니다. 3 개의 쿠키를 설정하고 두 번 리디렉션하며 사용자 이름과 비밀번호 외에 다른 많은 변수를 게시합니다.이 중 하나는 쿠키 값을 필요로합니다 (나는 값을 포스트 변수에 연결하려고했지만 심지어 운이 없음). 이것은 아마도 드물게 WKHTMLTOPDF의 단점이 아닙니다.

CURL을 사용하여 로그인하고 페이지를 로컬 파일에 기록한 다음 WKHTMLTOPDF를 실행했습니다.확실히 비슷한 문제가있는 다른 모든 사람들을위한 확실한 해결책.


편집 : 당신은 phantomjs와 함께 PDF로 렌더링을 시도에 관심이있을 수

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 구문을 개략적으로 설명하는 것이 훨씬 도움이되었을 것입니다. –

+0

안녕하세요 Ifedi, 내 구체적인 구현 실제로 실제로 귀하의 유스 케이스에 도움이 될지 모르겠습니다 (그것은 내 필요에 특정 된 게시물 문자열 및 PHP를 통해 구현 된)하지만 잘하면 그것은 도움이 그것을 추가했습니다. – Chords

12

모든 로그인 양식은 모든 사이트마다 다를 수 있습니다. 무엇을하고 싶은지는 페이지에서 (아마 알고있는) HTML을 읽음으로써 로그인 폼의 목표에 무엇을 전달해야하는지 결정하는 것입니다. 교차 사이트 요청 위조를 방지하기 위해 사용자 이름/암호 필드 위에 숨겨진 추가 필드가 필요할 수 있습니다.

쿠키 jar 매개 변수는 웹 서버에서 가져온 쿠키를 저장하는 파일입니다. 로그인 양식에 대한 첫 번째 요청에서 지정해야하며 이후 쿠키/세션 사용 요청 .

  1. 봐 필요한 페이지에 추가 매개 변수가 있는지 확인 : 웹 서버는 로그인 후 다시 너희에게 준 것이다 정보

    그래서 정리해합니다.
  2. 제출할 URL이 해당 페이지의 양식 요소의 ACTION 속성과 동일한 지 확인하십시오.
  3. 로그인 요청과 두 번째 콘텐츠 요청 모두에서 --cookie-jar 매개 변수를 사용하십시오. --post 매개 변수에 대한
  4. 구문은 내가에 로그인하기 위해 노력하고있어 양식이 너무 복잡하다고 생각
+0

감사합니다. 비록 내가 다른 길을 선택해도 당신의 대답은 확고 해 보인다. 회신에 시간을내어 주셔서 감사합니다! – Chords

+0

@ 코드 문제가 없습니다. 몇 번 wkhtmltopdf를 사용했습니다. 당신이 설명했던 것과 같이 좀 더 복잡한 경우를 생각해 봅시다. 사용하는 데 약간의 고통이 있습니다 ... 당신의 후속 조치에서 언급 한 리다이렉션을 어떻게 다룰 지 모르겠습니다. – hsanders

3

: CURL, 관심이 있다면.

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

당신은 rasterize.js here을 찾을 수 있습니다. 기본적으로 로그인 페이지에 로그인 할 수있는 자바 스크립트를 작성한 다음 PDF 작성을 수행합니다.

그러나 출력은 wkhtmltopdf와 다릅니다. phantomjs PDF 출력이 너무 끔찍한 경우 HTML을 파일로 저장 한 다음 wkhtmltopdf로 렌더링 할 수 있습니다.