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.