2016-05-22 14 views
0

ウェブサイトから送信された識別クッキーを取得しようとしていますが、これはVolley libraryを使用しています。ボレーを使用してウェブサイトからクッキーを取得

まず第一に、はい私は日の過去のカップルのための広範囲にこの主題を検索し、私はこのコードをラックに管理し、すべての答え使用しています戻らない

public class Login extends AppCompatActivity { 
StringRequest stringRequest = null; 
RequestQueue queue; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 
    queue = Volley.newRequestQueue(this); 
    Button b = (Button) findViewById(R.id.bauth); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String url = "http://daviddurand.info/D228/pizza/?action=login&user=david"; 
      stringRequest = new StringRequest(Request.Method.GET, url, 
        new Response.Listener<String>() { 
         @Override 
         public void onResponse(String response) { 
          CookieManager manager = new CookieManager(); 
          CookieHandler.setDefault(manager); 
          try { 
           Log.d("URI 1", manager.getCookieStore().get(new URI("http://daviddurand.info/D228/pizza/?action=login&user=david")).toString()); 
          } catch (URISyntaxException e) { 
           e.printStackTrace(); 
          } 
          Log.d("URIS", manager.getCookieStore().getURIs().toString()); 
          Log.d("COOKIE", manager.getCookieStore().getCookies().toString()); 
         } 
        }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        //error 
       } 
      }); 
      // Add the request to the RequestQueue. 
      queue.add(stringRequest); 
     } 
    }); 

} 

}

を空の括弧以上のものなので、私は何かが間違っていると推測しています。 私はここに向かうでしょうか?この仕事をするために正確に何を追加する必要がありますか?あなたの応答に

CookieManager manager = new CookieManager(); 
CookieHandler.setDefault(manager); 

+0

む〜。サーバーデータとクッキーの両方を返すカスタムの 'Request'サブクラスを作る必要があると思います。私は 'CookieManager'が私が要求した正確な時刻に更新されたクッキーを持っているとは信じていません。 –

答えて

-1

オーケー前

CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

を行うことができますボレーのリクエストとdjodjoの答えを使用して、私はそれが動作するように必要なものだけで終わった!

OkHttpStack.java:

import com.android.volley.toolbox.HurlStack; 
import com.squareup.okhttp.OkHttpClient; 
import com.squareup.okhttp.OkUrlFactory; 
import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.URL; 
/** 
* An {@link com.android.volley.toolbox.HttpStack HttpStack} implementation which 
* uses OkHttp as its transport. 
*/ 
public class OkHttpStack extends HurlStack { 
private final OkUrlFactory mFactory; 

public OkHttpStack() { 
    this(new OkHttpClient()); 
} 

public OkHttpStack(OkHttpClient client) { 
    if (client == null) { 
     throw new NullPointerException("Client must not be null."); 
    } 
    mFactory = new OkUrlFactory(client); 
} 

@Override protected HttpURLConnection createConnection(URL url) throws IOException { 
    return mFactory.open(url); 
} 
} 

そしてメインクラスへの更新:

public class Login extends AppCompatActivity { 
Request stringRequest = null; 
RequestQueue queue; 
CookieManager manager = new CookieManager(null,CookiePolicy.ACCEPT_ALL); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 
    CookieHandler.setDefault(manager); 
    queue = Volley.newRequestQueue(this, new OkHttpStack()); 
    Button b = (Button) findViewById(R.id.bauth); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String url = "http://daviddurand.info/D228/pizza/?action=login&user=david"; 
      stringRequest = new StringRequest(Request.Method.POST, url, 
        new Response.Listener<String>() { 

         @Override 
         public void onResponse(String response) { 

          try { 
           Log.d("URI 1", manager.getCookieStore().get(new URI("http://daviddurand.info/D228/pizza/?action=login&user=david")).toString()); 
          } catch (URISyntaxException e) { 
           e.printStackTrace(); 
          } 
          Log.d("response",response); 
          Log.d("URIS", manager.getCookieStore().getURIs().toString()); 
          Log.d("COOKIE", manager.getCookieStore().getCookies().toString()); 
          try { 
           Log.d("request", stringRequest.getHeaders().toString()); 
          } catch (AuthFailureError authFailureError) { 
           authFailureError.printStackTrace(); 
          } 
         } 
        }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        //error 
       } 
      }); 
      // Add the request to the RequestQueue. 
      queue.add(stringRequest); 
     } 
    }); 

} 
+0

okhttpはCookieマネージャとは関係ありませんが、私があなたに与えた正確な答えとあなたが実際に使用したものです。私はあなたが私の答えを使用して、あなたはそれの上に自分自身を書いて、それを受け入れることは非常に奇妙であることがわかります。 – djodjo

+0

ここではクッキーマネージャーを使用することは問題ではありませんでした。 OkHttpなしであなたの答えを使用しても何も解決されず、値は空のままです。 – Ilias

+0

本当にそれは私が指摘したバグがあったからです。 – djodjo

0

あなたはこれを配置する必要がありいけません。あなたが電話をかける前に一度だけ。

CookieHandlerの使用HttpURLConnection(明らかにhttpスタックを使用しています:)は、Cookieを処理して、Volley自体でそれを処理する必要があります。

ソリューションに興味がある人のために、私はOkHttpStackというクラスを作成するためにOkHttp を使用して終了し、それを渡されたので、あなたは、単にqueue = Volley.newRequestQueue(this);

関連する問題