2011-12-31 2 views
5

일반적으로 페이지로그인 후 리디렉션하는 페이지를 다운로드하는 방법은 무엇입니까? 로그인 폼이

wget --no-check-certificate --save-cookies cookies --keep-session-cookies \ 
    --post-data="username=example&password=example" \ 
    "https://example.com/index.php?title=Special:Userlogin&returntotitle=" 

wget --no-check-certificate --load-cookies=cookies \ 
    --no-parent -r --level=2 -nc -E \ 
    https://example.com/Special:Sitemap 

로 다운로드 할 수 있습니다 그러나 로그인이 필요한 경우 DekiWiki 사이트의 경우, 이것은 작동하지 않습니다.

문제 솔기는 man wget

주에 설명합니다 :를 Wget은 POST 요청이 완료된 후,이 리디렉션 된 URL에 POST 데이터를 전송하지 않습니다 리디렉션합니다. 이는 POST를 처리하는 URL이 보통 으로 응답하여 POST를 원하거나 받아들이지 않는 일반 페이지로 리디렉션하기 때문입니다. 이 동작이 최적임을 명확히 알지 못합니다. 문제가 해결되지 않으면 나중에 이 변경되었을 수 있습니다.

질문

이 예를 들어, 펄을 사용하여 수행 할 수 있습니다 아마도 HTML::TreeBuilder 3 또는 HTML::TokeParser 또는 Mechanize 또는 다른 Perl 모듈을 사용하고 있습니까?

답변

4

로그인이 필요한 일부 사이트는 응답과 함께 쿠키를 보내지 않습니다.

대신 대부분의 브라우저에서 자동으로 따라 오는 리디렉션 응답 (302 Object Moved)을 보낸 다음 해당 리디렉션 페이지에 대한 응답으로 쿠키가 전송됩니다.

curl_opt FOLLOW_LOCATION을 사용하도록 설정하려면 curl을 사용하고, 명령 행 도구에서는 -location 옵션을 사용합니다. wget과 같은 무료 도구입니다.

http://curl.haxx.se/download.html

curl --cookie cookie.txt --cookie-jar cookie.txt \ 
    --data-urlencode "username=example&password=example" \ 
    --insecure --location https://example.com/index.php?title=Special:Userlogin&returntotitle= -o downloadedfile.html https://example.com/Special:Sitemap 

또한 때때로 로그인 폼 대신 단지 애플리케이션/x-www-form-urlencoded를 포스트 멀티 파트/폼 데이터 포스트를 기대한다. 곱슬 곱슬하게 여러 부분/양식 데이터 게시물을 변경하려면 - data-urlencode에서 -F로 변경하십시오.

+0

매우 흥미 롭습니다. 사이트 미러링도 가능합니까? 예제에서는 wget의'--no-parent -r --level = 2'를 사용합니다. –

+1

원본 페이지에서 가리키는 모든 페이지를 반복적으로 다운로드 하시겠습니까? 아니오, curl도 -r --level = 2와 동등하지만 API 인터페이스 인 libcurl은 html 페이지를 구문 분석하고 해당 페이지의 모든 링크를 다운로드하도록 쉽게 프로그래밍 할 수 있습니다. Libcurl은 다음 언어들에 대한 바인딩을 가지고 있습니다 : @Motes, "-cookie-jar" – Motes

+0

@Motes, "Cookie-jar" "- 쿠키 - 항아리"로 바꿀 필요가 있죠? – Sathish

관련 문제