今日のメモ
昨晩は
HttpGet httpget = new HttpGet("http://test-yamanetoshi.appspot.com/_ah/login?auth=" + authKey);
で作った HttpGet オブジェクトを execute に渡したけれど entity がぬるぽという事でした。無理矢理 authKey をコピペしてブラウザで通信してみましたが何も出ず。
むむ、と言いつつ http://test-yamanetoshi.appspot.com/ にアクセスしてみたら
{"result","Login Success"}
な出力。ひええ、と言いつつ Android 側に盛り込んでみたら動いた。
HttpGet httpget = new HttpGet("http://test-yamanetoshi.appspot.com/_ah/login?auth=" + authKey); try { response = httpClient.execute(httpget); httpget = new HttpGet("http://test-yamanetoshi.appspot.com/"); response = httpClient.execute(httpget); InputStream is = response.getEntity().getContent();
これはちょっとあり得ないカンジ。もう少し良い方法は無いものか、と言いつつもう少し調べます。資料は以下との事。
あら?
上記資料だと POST 使っとるな。そもそもレスポンスがどうなってるか、をもう少しきちんと精査する必要ありそげ。
確認
ええと、authKey なアクセス部分をコメントアウトして試してみましたところ、
{"result", "Login Unsuccessful"}
との事。元に戻したら Success だった
# よく考えたら英語が変ですがスルー
しかしこの件、コードがキタナいのもですが、挙動として微妙杉。認証が必要な URL にアクセスする場合は authKey で一回アクセスしないとダメって事なのかなぁ。あるいは / へのアクセスだから微妙だったりするの?
てコトで
GAE 側を以下なカンジにして deploy してみました。
application = webapp.WSGIApplication([('/test/', MainHandler)], debug=True)
で、ドキュメントにある通りってコトで以下にしてみたら
HttpGet httpget = new HttpGet("http://test-yamanetoshi.appspot.com/_ah/login?auth=" + authKey + "/test");
ステイタス 500 が戻ってきました。とほほ杉。末端 / が必要なの? って言いつつブラウザで試してみたんですが NG でした。
間違えてました
こうしないとダメなのか。
HttpGet httpget = new HttpGet("http://test-yamanetoshi.appspot.com/_ah/login?auth=" + authKey + "&continue=" + "/test");
この方式でブラウザでは大丈夫でした。しかしこの方法はこの文書には書いてなかったけどなぁ。
Android 実装でも正常動作を確認してます。これで認証云々はハードル超えたかと。
この後は
- キタナいコードを整理
- ログイン情報を preference にナニ
- preference 関連な処理
- 戻ってくる json を textField に出力
あたりをごにょごにょしてみる方向で。あら? ってコトは GAE 側をこうして
application = webapp.WSGIApplication([('/', MainHandler)], debug=True)
Android 側をこうすれば OK かなぁ。
HttpGet httpget = new HttpGet("http://test-yamanetoshi.appspot.com/_ah/login?auth=" + authKey + "&continue=" + "/");
動きました。やれやれ。