2012년 4월 25일 수요일

로그인 해야 접근 가능한 페이지 curl 로 가져오기.



영화 '건축학 개론'을 보고 문득 옛날 생각도 나고 해서 소학회 앨범란을 들어가봤습니다.
하나하나 사진을 클릭해야 하는 구조라 인터페이스가 불편해서 간단히 사진을 긁어오는 파이썬 프로그램을 짜서 사진을 모조리 긁어 와 봤습니다.

이 경우, 회원 전용 홈페이지라 로그인이 필요한 관계로 curl 을 이용해 해결했는데, 까먹지 않도록 기록겸 정보 공유를 위해 블로깅 해 둡니다.

test.com 이라는 페이지로 로그인 한다고 가정하겠습니다.
먼저, 로그인 페이지의 소스 보기를 이용해 로그인에 필요한 정보를 받는 input 태그의 name 속성을 알아냅니다.
이 경우, id 와 passwd 를 이용해 사용자 id와 패스워드를 받고 있는 걸로 가정합니다.

<input type="text" name="id"
<input type="password" name="passwd"

페이지 구성에 따라 다르지만, 로그인 버튼을 누르면 데이터를 다른 URL로 넘겨줘서, 거기서 데이터를 확인하고 로그인 과정을 거치는 경우도 있습니다. 이를 확인하기 위해, 실제 로그인 과정을 처리하는 URL을 확인 합니다. 이 경우, test.com/login_do 라는 url 로 이동한다고 가정합니다.


이제, 다음 명령을 이용해 로그인합니다. 여러분의 id 는 test_id 이고, 패스워드는 test_password 라 가정하겠습니다.

$ curl --cookie-jar cjar --output /dev/null http://test.com
$ curl --cookie cjar --cookie-jar cjar \
            --data 'id=test_id' --data 'passwd=test_password' \
            --location --output loginresult.html \
            http://test.com/auth/login_do

첫 명령은 http://test.com URL 로 접속(GET 요청)하고, 쿠키를 cjar 라는 파일에 저장하며, 접속 요청 결과(GET에 의해 얻어온 페이지 내용)은 버린다는 내용입니다.

두번째 명령은 http://test.com/login_do URL 로 접속(GET 요청)하며, 로그인에 필요한 데이터를 --data 옵션을 이용해 전달하며, cjar 파일의 쿠키를 이용한다는 의미입니다. 접속 요청 결과를 loginresult.html 파일에 저장한다는 내용입니다.
loginresult.html 을 열어보면 대부분 로그인 성공을 의미하는 문구가 있을 겁니다.


이제, cjar 파일을 계속 이용하면서 curl 을 사용하면, 로그인 해야만 접근 가능하던 URL에 접근 할 수 있습니다.
예를 들어, 다음과 같은 명령을 이용해서 test.com/article/1235.html 과 같이, 로그인을 하기 전에는 curl 로 얻어올 수 없었던 파일 등을 얻어 올 수 있습니다.

$ curl --cookie cjar --output 1235.html \
            http://test.com/article/1235.html

간단한 예제를 만들어 github에 올려 보았습니다.
다음 주소로 가시면 됩니다:
https://github.com/sjp38/fetch_login_need_photo


참고 문서 : http://www.linuxjournal.com/video/use-curl-login-websites-script

댓글 없음:

댓글 쓰기