2016년 4월 29일 금요일

스타벅스에서 구글 글래스로 Free Wifi 사용하기 (how to use startbucks wifi with google glasses)

집 근처에 스타벅스가 새로 생겨서 벚꽃 폈을 무렵부터 산책도 할겸 출근 도장을 찍고 있다.
걸어 다닐때는 Google glasses 를 쓰고 Local Music player 로 음악을 들으면서, 관심있는 일상에 대해 사진을 찍곤 하는데 스타벅스에 갈 때면 불편했던 것이 Google Glasses 로는 Wifi 사용이 불가능 한 것이었는데, 이유는 인증 페이지를 거쳐야 Wifi 를 사용할 수 있기 때문이다. 혹시나 싶어서 Starbucks App 이 있는가 열심히 찾아 봤는데 역시나 없었다. Google glasses 버전 1이 단종 되고나서는 관련 Article 조차도 찾기 쉽지 않았다.

Google Glass 가 일반 Linux 였다면 별 어려움 없이 Auto login script 를 하나 만들어서 사용했겠지만, 아쉽게도 익숙하지 않은 Android 였기 때문에 Wifi 를 사용하지 못하고 투덜대기만 했었다. 그런데 최근에 SmartHome 을 하면서 안드로이드 앱을 조금 만지다 보니 '한번 해 볼까?' 하는 근거 없는 자신감이 생기는게 아닌가.

ㅎㅎ.. 모든 작업의 시작은 github 로 부터...
스타벅스 auto login 관련해서 android 코드를 찾아 보니 '이곳' 이 눈에 띄었다.
2015년 5월에 마지막 update 가 있었는데 그리 오래 되지 않은 소스라서 사용할 수 있을 것 같았다. 노트북에 android studio 를 설치하고 무작정 스타벅스로 갔다. 출발할 때는 커피 한잔 다 마시기 전에 끝내고 오리라~ 는 마음이었는데, usb 케이블을 귀 옆에 꽂고 3시간동안 열심히 테스트를 해봐도 실패의 연속이었다.

하지만 그냥 포기하기에는 매일 같이 출근 도장 찍는 스벅의 유혹이 너무 컸다.
다음날에는 먹을 챙기기도 하고 하루종일 있을 마음가짐으로 스벅으로 향했다. 첫날에는 github 작성자를 무턱대고 믿고, 테스트 하는 나에게 잘못이 있을 거라고 생각했기 때문에 code 를 line by line 으로 볼 생각이 없었는데, 둘째날에는 init 코드부터 순서대로 따라 가면서 봤다.
아니나 다를까... 실제 코드의 동작과 wifi 의 응답방식이 좀 달랐다.

원본 코드 동작 방식은,
public boolean login(String test_url) throws Exception
{
URL testURL = new URL(test_url);
HttpURLConnection conn = (HttpURLConnection) testURL.openConnection();
...
int responseCode = conn.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_MOVED_TEMP)
{
String redirectUrlStr = conn.getHeaderField("Location");
conn = (HttpURLConnection) redirectUrl.openConnection();
...
HtmlForm formInfo = new HtmlForm(testURL, html.toString());

Log.d(TAG, "Accepting the terms and conditions...");
conn = (HttpURLConnection) formInfo.actionUrl.openConnection();

Wifi 에 접속하고 최고 접속하는 testURL 의 응답이 HTTP_MOVED_TEMP 일 경우에 redirection url 을 얻어와서 다시 접속하고, 그 때 받아온 로그인 Page 에서 form 을 parsing 해서 submit 하여 인증을 얻는 방식이다.


이렇게 원 코드는 redirection 이 한번 발생하는 것을 가정하고 코드를 작성했는데 wifi 최초 접속시에 들어오는 html 코드는 또 한번 redirect 를 시켜 버리는 것이 아닌가!!!




오호라~ 이런 문제라면 많은 수정 없이 성공 할 수 있을 것 같았다. 


그래서 첫 redirection url 에서 location.href 를 갖고 와서 다시 한번 redirection url 을 접근하여 form 을 얻어 와서 시도하니 아래와 같이 성공!!! 

04-29 15:45:14.734: D/SbAutoLogin(1784): startScan:true
04-29 15:45:16.109: D/SbAutoLogin(1784): ssid : "olleh_starbucks_1F"
04-29 15:45:18.531: D/SbAutoLogin(1784): ssid is equal
04-29 15:45:18.554: D/SbAutoLogin(1784): Attempting to visit [http://www.naver.com]...
04-29 15:45:19.218: D/SbAutoLogin(1784): Downloading Starbucks login page
04-29 15:45:23.734: D/SbAutoLogin(1784): Parsing Starbucks login page...
04-29 15:45:23.765: D/SbAutoLogin(1784): Accepting the terms and conditions...
04-29 15:45:23.812: D/SbAutoLogin(1784): Form sbumitted. HTTP status code 200
04-29 15:45:23.851: D/SbAutoLogin(1784): SUCCESS: The terms and conditions have been agreed to and you can now connect to the Internet!
와우! 이제 부터 Starbucks 에서도 Google Glass 로 Wifi 사용이 가능해 졌다.

댓글 없음: