Wget으로 로그인 페이지를 통과하는 방법은 무엇입니까?


263

Wget 을 사용 하여 페이지를 다운로드 하려고하는데 로그인 화면을 통과 할 수 없습니다.

로그인 페이지의 게시물 데이터를 사용하여 사용자 이름 / 암호를 보낸 다음 인증 된 사용자로 실제 페이지를 다운로드하려면 어떻게합니까?


답변:


341

매뉴얼 페이지를 기반으로 :

# 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매개 변수가 제대로입니다 퍼센트 인코딩 (특히 앰퍼샌드!) 또는 요청이 아마 실패 할 것이다. 또한 있는지 확인 user하고 password올바른 열쇠입니다; 로그인 페이지의 HTML을 찾아 올바른 키를 찾을 수 있습니다 (브라우저의 "검사 요소"기능 name을보고 사용자 이름 및 비밀번호 필드 에서 속성을 찾으십시오 ).


10
첫 번째 명령에 --keep-session-cookies를 추가 하시겠습니까?
Felipe Alvarez 2

4
이를 위해 -p( --page-requisites)이 필요하지 않습니다 .
ændrük

14
또한 --delete-after첫 번째 검색에 추가 할 가치가 있으므로 로그인하여 결과 페이지를 저장하지 않아도됩니다.
Jim Hunziker

2
오류가 발생합니다. WGET64: missing URL전체 wget 명령을 한 줄에 넣고`\`를 제거했습니다.
Mowgli

6
--keep-session-cookies는 첫 번째 명령에만 필요합니다. 쿠키를 파일에 저장할 때 세션 쿠키를 포함하도록 첫 번째 명령에 지시합니다. 두 번째 명령은 제공된 파일에서 모든 쿠키를 읽습니다.
wadim

63

한 번만 사용하려면 브라우저를 통해 로그인 한 후 필요한 헤더를 복사하십시오.

스크린 샷 개발자 도구의 네트워크 탭에서 사용 "컬로 복사"(개봉 후 페이지를 다시로드)와 컬의 헤더 플래그 교체 -H--datawget과의와 --header--post-data.


1
훌륭한 솔루션!
menteith

대박! 또한 wget 대신 curl을 사용하는 옵션을 지적했습니다. 왜냐하면 똑같은 일을 할 수 있고 매개 변수를 변경할 필요가 없기 때문입니다.
Jan

매우 깨끗하고 간단한 솔루션, +1!
Kresimir Pendic

wget올바른 쿠키로는 그렇지 않았지만 이것은 나를 위해 일했습니다 . 웹 서비스가 "User-Agent"또는 "Cache-Control"과 같이 중요하지 않은 것으로 보이는 여러 다른 GET 헤더를 검사한다고 생각합니다.
아서

@Arthur 저 에게이 솔루션은 효과가있는 유일한 솔루션이었습니다. 가능한 많은 URL에서 헤더 데이터를 제거하려고 시도했으며 본질적으로 쿠키 데이터로 끝났습니다. 따라서 wget데이터가 잘못된 방식으로 제공 되었다고 의심 됩니다.
Florian Blume

62

--no-cookies 및 Cookie HTTP 요청 헤더로 wget하기 위해 기존 연결 쿠키를 직접 제공했습니다. 필자의 경우 로그인 티켓으로 여러 요청을 사용하여 로그인이 더 복잡해 보이는 Moodle University 로그인이었습니다. 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


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

3
동시에 여러 쿠키를 설정할 수도 있습니다. --header "Cookie : access_token = IKVYJ; XSRF-TOKEN = 5e10521d"
Phil C

29

나는 같은 문제가 있었다. 내 솔루션은 Chrome을 통해 로그인하고 쿠키 데이터를 텍스트 파일에 저장하는 것이 었습니다. Chrome 확장 프로그램 인 Chrome cookie.txt 내보내기 확장 프로그램을 사용하면 쉽게 수행 할 수 있습니다 .

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


1
불행히도 자동 스크립팅에는 적용되지 않습니다
Znik

1
이 질문은 자동 스크립팅을 지정하지 않습니다. 이 솔루션을 사용하면 작업의 99 %를 자동화 할 수 있습니다.
윌 셰퍼드

1
안타깝게도 Google은이 기술에 비해 너무 똑똑해야합니다. 여전히 로그인 페이지가 나타납니다.
Josiah Yoder

1
물론 Google은 비밀 reCAPTCHA를 사용합니다. 여기서 많은 곳에서 보았 듯이 표준 프로그래밍 API를 사용하는 것이 가장 실용적인 옵션입니다.
Josiah Yoder

10

나는 파일을 다운로드하지 않은 한 줄짜리를 원했습니다. 다음은 쿠키 출력을 다음 요청으로 파이핑하는 예입니다. 젠투에서만 다음을 테스트했지만 대부분의 * nix 환경에서 작동합니다.

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


9

POST 양식 데이터를 수행하기 위해 cURL이 필요하지 않습니다. --post-data 'key1=value1&key2=value2'잘 작동합니다. 참고 : 파일의 POST 데이터로 wget하기 위해 파일 이름을 전달할 수도 있습니다.


8

기본 인증을 사용하는 경우 :

wget http://username:password@www.domain.com/page.html

POST 양식 데이터를 사용하는 경우 cURL 과 같은 것을 사용해야 합니다.


서버의 내용을 변경할 권한이 없습니다. 읽기 전용입니다.
Señor Reginold Francis

7
그래서? 이 중 어느 것도 서버에서 아무것도 변경하지 않아도됩니다.
ceejayoz

5

lynx와 wget을 사용하는 솔루션.

참고 : Lynx는 --enable-persistent-cookies 플래그를 사용하여 컴파일 해야합니다.

wget을 사용하여 로그인이 필요한 사이트에서 일부 파일을 다운로드하려면 쿠키 파일 만 있으면됩니다. 쿠키 파일을 생성하기 위해 lynx를 선택합니다. lynx는 텍스트 웹 브라우저입니다. 먼저 쿠키를 저장하려면 lynx에 대한 구성 파일이 필요합니다. lynx.cfg 파일을 작성하십시오. 이 구성을 파일에 작성하십시오.

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

그런 다음이 명령으로 lynx를 시작하십시오.

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

2
로그인에 자바 스크립트가 필요한 경우는 어떻습니까? lynx는 자바 스크립트를 지원하지 않는 것 같습니다.
Tiberiu

1

브라우저에서 얻을 수있는 큰 파일 링크를 서버에서 wget 으로 다운로드하는 예제 .

예를 들어 Chrome을 사용합니다.

필요한 곳에 로그인하고 다운로드를 누릅니다. 링크를 다운로드하여 복사하십시오.

여기에 이미지 설명을 입력하십시오

그런 다음 로그인 페이지에서 DevTools 를 열고 콘솔 로 이동 하여 쿠키를 입력하십시오.document.cookie

여기에 이미지 설명을 입력하십시오

이제 서버로 이동하여 파일을 다운로드하십시오. wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>

여기에 이미지 설명을 입력하십시오


이 답변은 두 페이지의 쿠키가있는 Google에 적합하지 않은 것 같습니다.
Josiah Yoder

물론 Google은 비밀 reCAPTCHA를 사용합니다. 여기서 많은 곳에서 보았 듯이 표준 프로그래밍 API를 사용하는 것이 가장 실용적인 옵션입니다.
Josiah Yoder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.