2016-11-21 5 views
0

私のウェブサイトにログインすると、Cookieが取得されます。そのクッキーは有効な年であり、私はそれを私のAndroidアプリケーションに実装したい。このCookieを使用すると、JSONデータを取得でき、Interceptor拡張機能を備えたPostmanで動作します。 しかし、Androidで私はそれを働かせることはできません。
Retrofit2:Cookieを使用したJSONの取得Android

public void GetCaregiver(){ 
    CookieInterceptor interceptor = new CookieInterceptor(); 
    interceptor.setSessionCookie("eyJpdiI6IjVcL1d6MEhLaGNZV3V2MFdVdFRtRVN3PT0iLCJ2YWx1ZSI6IldZWU42cUZQblcwejlDMk5LVllYOENXSThmVk9UUFIzaStxclZoUTFIRGlMazFlUzdjVDhFcTVxRllwMERncFFLZTVNQlQ0VUQ2SG5BSUE3TzJcL0Vrdz09IiwibWFjIjoiNDk3YmY3ZmE0NzA2Nzk1NzMwNTM0NDViOGNjNDllN2ZmZmYyNmNhNTdjNWYwOWYwYTIzZmI2YmI5OTc3OWZjNiJ9"); 
    OkHttpClient okHttpClient = new OkHttpClient.Builder() 
      .addInterceptor(interceptor) 
      .build(); 

    Gson gson = new GsonBuilder() 
      .setLenient() 
      .create(); 

    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(zorggemakURL) 
      .callFactory(okHttpClient) 
      .addConverterFactory(GsonConverterFactory.create(gson)) 
      .build(); 

    RESTInterface service = retrofit.create(RESTInterface.class); 

    Call<List<Caregiver>> call = service.getCaregivers(); 

    call.enqueue(new Callback<List<Caregiver>>() { 
     @Override 
     public void onResponse(Call<List<Caregiver>> call, retrofit2.Response<List<Caregiver>> response) { 
      Log.d("Response", response.toString()); 
     } 

     @Override 
     public void onFailure(Call<List<Caregiver>> call, Throwable t) { 
      Log.d("Response", t.toString()); 
     } 
    }); 
} 

ボレー:

public void GetCaregiver() { 
    // the request 
    String url = zorggemakURL + "api/user/overview"; 

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, 
      url, 
      null, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        // response 
        Log.d("Response", response.toString()); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // TODO Auto-generated method stub 
        Log.d("ERROR", "error => " + error.toString()); 
       } 
      }) { 

     @Override 
     public String getBodyContentType() { 
      return "application/x-www-form-urlencoded"; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      Map<String, String> headers = new HashMap<String, String>(); 
      headers.put("Accept", "application/json"); 

      String creds = String.format("%s:%s", "orlandosmits", "test123"); 
      String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT); 
      headers.put("Cookie", cookie); 
      headers.put("Authorization", auth); 

      return headers; 
     } 
    }; 
    Volley.newRequestQueue(context).add(request); 
} 

私はいつも背中ではなくJSONデータをHTMLページを取得します私は多くの異なった方法でそれを試してみました。誰でもアイデアはありますか?

答えて

0

私はそれを働かせました。 最終コード:

public void GetCaregiver() { 
    OkHttpClient okHttpClient = new OkHttpClient.Builder() 
      .addInterceptor(new HeaderInterceptor()).build(); 

    Gson gson = new GsonBuilder() 
      .setLenient() 
      .create(); 

    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(zorggemakURL) 
      .callFactory(okHttpClient) 
      .addConverterFactory(GsonConverterFactory.create(gson)) 
      .build(); 

    RESTInterface service = retrofit.create(RESTInterface.class); 

    Call<List<Caregiver>> call = service.getCaregivers(); 

    call.enqueue(new Callback<List<Caregiver>>() { 
     @Override 
     public void onResponse(Call<List<Caregiver>> call, retrofit2.Response<List<Caregiver>> response) { 
      List<Caregiver> caregivers = response.body(); 
      String test = ""; 
     } 

     @Override 
     public void onFailure(Call<List<Caregiver>> call, Throwable t) { 
      Log.d("Response", t.toString()); 
     } 
    }); 
} 

HeaderInterceptorクラス:

public class HeaderInterceptor implements Interceptor { 
@Override 
public Response intercept(Chain chain) 
     throws IOException { 
    Request request = chain.request(); 
    request = request.newBuilder() 
      .addHeader("Cookie", "laravel_session=eyJpdiI6Im54UEpmbW9qdlc0a01FdG1uSGdNU3c9PSIsInZhbHVlIjoieGNuck96K0V2UWU1aG1vVE9DRDRQeWNQbEJ0UldEdWt2TUxFWjByVGVxckZ1a1NhcnE5dXMxTDBqTGtrcExQVEwzWkNQcTNSeHpUVXpFU3A5NHYxdEE9PSIsIm1hYyI6IjhlMzY0ODllYzEwOTFkNTYzZDU2ZmY1NTM5YTUyNmE0MTVlY2JmMjJkZDk0YmFiZmVhNDJmZDNkZmMwMTg5YWIifQ%3D%3D") 
      .build(); 
    Response response = chain.proceed(request); 
    return response; 
} 
関連する問題