Help us understand the problem. What is going on with this article?

VolleyでCookieとUserAgentをまとめていじりたい

More than 5 years have passed since last update.

Volleyは便利なんだけれども、どうしてもログインが維持されずに困った。
調べて見たところ、某サービスはセッション管理にcookieとUserAgentの一致を見ているらしい。なるほど。

そこで、Volleyで通信する際にCookieとUserAgentをいじって双方意図したものを使ってもらうようにした。

追記:2015/4/27
結局気持ち悪かったのでCookieManagerというのを見つけてきてそっちで書き直しました
Volleyでcookieをちゃんと扱う(あるいはHttpURLConnectionの話)

VolleyはどうもRequestを拡張するのが基本形のようです

VolleyでCookieを使い回す
こんな感じでRequestを拡張するとcookieに関しては解決した。(たぶん)UserAgentもこの手法で設定できるだろう。

でもなんかクラス増やすのちょっとスマートじゃない気もする。だいたい、拡張したらXXXRequestを全部MyXXXRequestに置き換えるのか?HAHAHA、冗談じゃない。そんなダサいの嫌だね。
それを知らないでうっかり標準クラス使ったら全てが終わるしね。

根元のRequestQueueでどうにかする

そこで各Requestではなくそれらを束ねるRequestQueueでどうにかする方法を探しました。

一番近い、というかほぼ答えだったのがこれ
Android、Volley にヘッダ情報を付加する(HurlStack)

これ自身は今回関係ないコードが混じっていたり、try-catchがあんまり好みじゃなかったりで結局以下のような感じに変えて使うことにしました。

RequestQueueWithCookie
// Volleyのリクエストキューを生成
RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext(), new HurlStack(){
    @Override
    public HttpResponse performRequest(Request<?> request, Map<String, String> additionalHeaders)
            throws IOException, AuthFailureError {
        Map newHeaders = new HashMap();
        newHeaders.putAll(additionalHeaders);
        // セッション維持のためcookieとUserAgentを設定する
        newHeaders.put("User-Agent", "ユーザーエージェント");
        newHeaders.put("Cookie", "クッキーの中身");

        // responseを拾えばSet-Cookieを回収できる
        HttpResponse response = super.performRequest(request, newHeaders);
//        response.getHeaders("Set-Cookie");

        return response;
    }
});

思ったよりシンプルだ。

その他参考にしたサイト

【Android】Volley各種設定メモ
他にもいくつか書いてあって便利
ネットワーク通信用ライブラリVolleyを使いこなす
そもそもVolleyってなんじゃ?というころにたくさん読み返しました。

YukiAsu
なぜか毎年別言語に取り組み続ける雑食系エンジニア。ここまで来てなんだけど個人的にはScalaが性に合ってた気がする。 PHP->Objective-C->Swift->AndroidSDK->Scala -> Python -> Ruby -> Go
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away