2016년 7월 1일 금요일

[Go] packtpub 무료책 받기




Packtpub 에서 무료책을 매일 제공하고 있는데 이 책을 받기 위해서 매번 들어가기가 구찮았다, 그러다가 python 이라는 언어를 접하게 되고 python3 로 자동으로 접속해서 구매하는 것을 한번 만들어 보았다.
그러다가 Go언어를 통해서 구현해 보면 어떨까해서 만들어 보았습니다.
python3 에서는 로그인 유지처리를 웹에 글이 많아서 찾을 수 있었는데, golang 의 session, cookie 유지는 어떻게 하는지 찾을 수 없었습니다.
그래서 golang.org 에서 제공하는 API 문서를 보고 한번 만들어 봤습니다.
python3 에서 cookie jar 를
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
로 연결을 해서 cookie 관리가 편하게 하는 것을 보고 한번 따라 해 봤습니다.
덕분에 http 연결에 대해서 공부하게 되었습니다. request, response 정말 어렵습니다. 알면 알 수록 모르겠습니다. 고수분들은 단박에 해결할 수 있었겠죠?

cookieJar 객체를 생성

cookieJar, err := cookiejar.New(nil)

http.Client 에 cookie 연결

client := &http.Client{Jar:cookieJar}

Request 로 보낸 자신의 계정 정보를 생성합니다

value := url.Value{}
value.Add(“email”, 이메일)
value.Add(“password”,비밀번호)
value.Add(“op”,”Login”)
value.Add("form_id", "packt_user_login_form")
post 보낼때는 utf–8로 인코딩을 하셔야 합니다.
python2에서 python3로 변하면서도 utf–8 로 인코딩을 해야 값이 제대라 전달이 되는데, 이건 왜 그런지.
잘 모르겠어요.

로그인 하기

이제 client로 이용할 request 객체를 생성합니다.

req, _ := http.NewRequest("POST", “https://packpub.com”, strings.NewReader(value.Encode()))
req.Header.Add("User-Agent", "Mozilla/5.0")
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
client를 이용해서 request 하면 됩니다.
res, _ := client.Do(req)
이제 client 객체를 이용해서 post. get 을 이용하면 접속한 상태로 페이지를 이동할 수 있습니다.

exe 다운로드