2009-08-24 3 views
194

Wget을 사용하여 페이지를 다운로드하려고하는데 로그인 화면을 지나칠 수 없습니다.Wget을 사용하여 로그인 페이지를 지나가는 방법?

로그인 페이지의 게시물 데이터를 사용하여 사용자 이름/비밀번호를 보내고 인증 된 사용자로 실제 페이지를 다운로드하려면 어떻게해야합니까?

+2

: http://stackoverflow.com/questions/12399087/curl-to-access-a-page-that-requires-a-login-from-a-different-page –

답변

276

: (! 특히 앰퍼샌드)

# Log in to the server. This only needs to be done once. 
wget --save-cookies cookies.txt \ 
    --keep-session-cookies \ 
    --post-data 'user=foo&password=bar' \ 
    --delete-after \ 
    http://server.com/auth.php 

# Now grab the page or pages we care about. 
wget --load-cookies cookies.txt \ 
    http://server.com/interesting/article.php 

확실히 --post-data 매개 변수가 제대로 percent-encoded되어 있는지 확인하거나 요청은 아마 실패 할 것이다. userpassword이 올바른 키인지 확인하십시오. 로그인 페이지의 HTML (브라우저의 "inspect 요소"기능을 살펴보고 사용자 이름 및 암호 필드에 name 속성을 찾으십시오)을 사용하여 올바른 키를 찾을 수 있습니다.

+9

--keep-session-cookies를 첫 번째 명령에 추가하거나 두 번째 명령에? –

+4

이것을 위해'-p' ('--page-requisites')는 필요 없습니다. –

+12

첫 번째 검색에'--delete-after'를 추가하여 결과 페이지의 로그인을 끝내지 않아도됩니다. –

7

것은 그들이 기본 인증을 사용하는 경우 :

wget http://username:[email protected]/page.html 

가 게시 된 양식 데이터를 사용하는 경우, 대신 cURL 같은 것을 사용해야합니다. 매뉴얼 페이지를 기반으로

+0

나는 필요 없다 액세스 서버에 아무것도 변경하려면, 그것은 단지 읽기 전용 –

+7

그래서? 이 중 어느 것도 서버에서 어떤 것도 변경해야합니다. – ceejayoz

8

게시 된 양식 데이터를 처리하는 데 cURL이 필요하지 않습니다. --post-data 'key1=value1&key2=value2'은 정상적으로 작동합니다. 참고 : 파일의 POST 데이터와 함께 wget에 파일 이름을 전달할 수도 있습니다.

21

나는 동일한 문제가있었습니다. 내 솔루션은 Chrome을 통한 로그인을 수행하고 쿠키 데이터를 텍스트 파일에 저장하는 것이 었습니다. 이 Chrome 확장 프로그램 (Chrome cookie.txt export extension)으로 쉽게 완료 할 수 있습니다.

쿠키 데이터를 가져올 때 wget과 함께 사용하는 방법에 대한 예제도 있습니다. 간단한 복사 - 붙여 넣기 명령 행이 제공됩니다.

+1

불행히도 자동화 된 스크립트에는 적용되지 않습니다. – Znik

40

나는 --no-cookies 및 Cookie HTTP 요청 헤더를 사용하여 wget에 대한 기존 연결의 쿠키를 직접 제공했습니다. 제 경우에는 로그인이 복잡한 (로그인 티켓으로 여러 요청을 사용하는) Moodle 대학 로그인이었습니다. POST 요청이기 때문에 --post-data를 추가했습니다. 예를 들어 , 모든 무들 사용자 목록을 가져 : 당신이 한 번 사용을 위해 필요한 경우

wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php

+2

굉장 팁. 자신의 컴퓨터에서 쿠키에 액세스 한 다음 명령 줄에서 다른 헤드리스 컴퓨터의 쿠키를 사용할 때 유용합니다. :) – Tuxdude

20

, 당신은 브라우저를 통해 로그인 할 수 있습니다, 그 후 필요한 헤더를 복사

screenshot 사용 "복사 등 개발자 도구의 네트워크 탭에서 "cURL"을 선택하고 (열기 후 페이지를 다시로드) 컬의 헤더 플래그 -H을 wget의 --header으로 바꿉니다.

7

아무런 파일도 다운로드하지 않은 원 - 라이너를 원했습니다. 다음은 쿠키 출력을 다음 요청으로 파이핑하는 예제입니다. 난 단지 젠투에서 다음 테스트,하지만 * 대부분의 괜찬아 환경에서 작동합니다 : 당신이 원하는 경우

출력이 저장 (브라우저에 가능성이 랩은하지만이 하나 개의 라인)

wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page' 파일, 변경 -O --O /some/file/name

0

나는 lynx와 wget을 사용하는 하나의 솔루션을 사용했습니다. 로그인이 필요한 사이트에서 wget을 사용하여 파일을 다운로드하려면 쿠키 파일 만 있으면됩니다. 쿠키 파일을 생성하기 위해 lynx를 선택합니다. lynx는 텍스트 웹 브라우저입니다. 먼저 lynx가 쿠키를 저장하기위한 설정 파일이 필요합니다. lynx.cfg 파일을 만듭니다. 이 구성을 파일에 기록하십시오.

SET_COOKIES:TRUE 
ACCEPT_ALL_COOKIES:TRUE 
PERSISTENT_COOKIES:TRUE 
COOKIE_FILE:cookie.file 

그런 다음이 명령으로 살쾡이를 시작

lynx -cfg=lynx.cfg http://the.site.com/login 

가 입력 한 사용자 이름과 암호를 선택 후 또는 이와 유사한 '이 PC에서 나를 유지'. 성공적으로 로그인하면 사이트의 아름다운 텍스트 웹 페이지가 표시됩니다. 그리고 당신은 로그 아웃합니다. 현재 디렉토리에 cookie.file이라는 쿠키 파일이 있습니다. 이것이 우리에게 wget에 필요한 것입니다.

그런 다음 wget은이 명령으로 사이트에서 파일을 다운로드 할 수 있습니다.

컬를 들어
wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz 
관련 문제