Domanda

Voglio recuperare i dati dalla pagina web, che contiene alcuni dati JSON. Il problema è che i dati JSON restituisce solo se l'utente è loggato nel sito web. Se non è, viene restituita la pagina di login.

URL url = new URL(API_URL);
URLConnection conn = url.openConnection();

BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream)));
StringBuilder builder = new StringBuilder();
String line = "";

while ((line = br.readLine()) != null) {
    builder.append(line + System.getProperty("line.separator"));
}
String result = builder.toString();

Quindi, in result mi aspetto di avere dati JSON. Ma ho una pagina di login lì. Ho provato login dal browser, ma non ha aiutato.

Come posso utilizzare i cookie dal mio browser per ottenere attraverso questa pagina di accesso?

È stato utile?

Soluzione

Se si sta utilizzando Java SE, mi consiglia di utilizzare la libreria Apache HttpClient. Questo ha il supporto per vari tipi di autenticazione, tra cui login basata su form con i cookie di sessione. Non so se questa è una buona raccomandazione per Android.

Modifica

Non si era accorto che il vero problema stava accedendo ai cookie del browser.

1: Hai provato a usare android.wewbkit.CookieManager.getInstance() createInstance(Context) per ottenere in possesso di esempio cookiemanager del browser?

2: E 'possibile scrivere l'applicazione (o parte di esso) come plugin webkit in modo che possa accedere al cookie che modo? (Non so abbastanza su webkit / Android per sapere se questo rende ancora senso.)

3: Se non è possibile farlo, si potrebbe plausibilmente scrivere l'applicazione come un proxy web e lo hanno "rubare" i biscotti come vengono attraverso. (Questo suona come una cattiva idea però. Ci sono problemi di sicurezza e privacy, così come il problema che si potrebbe interferire con la normale funzionalità del browser.)

4: Infine, c'è la possibilità di ripiego di scrivere l'applicazione per fare la propria login e gestire il proprio cookie di sessione. Il problema è che non si può evitare di fare la vostra specifica applicazione al modo in cui il sito web remoto di fare login.

FOLLOWUP

La risposta di @ Daniel Trebbien sostiene che l'opzione 1: è un non antipasto per motivi di sicurezza. Questo ha senso. (Se un'applicazione potrebbe arrivare a cookie di un'altra app, sicurezza del browser sarebbe inesistente.)

Mentre Android fornisce un'API Plugin, ma è deprecato e ho visto hai un distacco da un ingegnere Android dicendo che il suo uso è sconsigliato per il codice 3rd party. Questa opzione fa più o meno 2: un vicolo cieco.

Opzione 3:. Richiederebbe all'utente di configurare Browser del suo telefono per utilizzare la vostra applicazione come proxy ... che probabilmente non dovrebbe fare

Un paio di altre opzioni da prendere in considerazione sono:

5:. Implementare la funzionalità dell'applicazione in Javascript come plugin NPAPI Browser

6: Usa WebView per fornire l'applicazione con il proprio (verso il basso taglio) browser web. L'applicazione sarà naturalmente avere pieno accesso alla propria istanza CookieManager.

Altri suggerimenti

Se fosse possibile per afferrare i cookie arbitrarie da App Browser o il download di dati attraverso il browser, quindi sarei molto preoccupato, perché questi sarebbero problemi di sicurezza critici. Immaginate che qualcuno è connesso a BankOfAmerica.com e un app è in grado di ispezionare le pagine sessione bankofamerica.com biscotto o scaricare bankofamerica.com attraverso il browser. In entrambi i casi, l'applicazione sarebbe in grado di eseguire azioni di online banking come loggato individuale

La risposta più semplice è che la vostra applicazione ha bisogno di chiedere informazioni di accesso dell'utente. È quindi utilizzare HttpClient con il proprio negozio cookie per firmare l'utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top