2011-09-07 26 views
5

Sto leggendo da un URL nel mio codice java ma la pagina che voglio leggere esegue un comando quando è caricato e InputStreamReader legge la pagina prima che sia completamente caricata, quindi il mio lettore bufferizzato raccoglie solo l'HTML sulla pagina prima che venga caricato il contenuto reale.Attendi il caricamento della pagina prima di leggere il contenuto da un URL in Java

Il mio obiettivo principale è trovare la parola "vendite" nella pagina, ma non posso farlo se lo stream aperto è collegato prima che venga caricata la pagina intera. C'è un modo per aspettare che si carichi o qualcosa del genere?

Ecco il mio codice:

URL url = new URL("http://urlgoeshere.com?"+ withAParam); 
     URLConnection uc = url.openConnection(); 
     uc.connect(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); 
     String inputLine = in.readLine(); 
     int index = -1;    
     while ((inputLine = in.readLine()) != null){ 
      index=inputLine.toLowerCase().indexOf("sales"); 
      if(index>=0){ 
      log.info("Found sales!"); 
       break;     
      } 
     } 
     if (in != null){ 
      in.close(); 
     } 
+0

Questo non ha senso. 'BufferedReader' leggerà la pagina in modo sequenziale finché lo stream non avrà più contenuto. Verrà letto qualsiasi cosa scriva la pagina. Se la pagina è dinamica, continuerà a raccogliere i contenuti. Se le azioni di post-caricamento sono fatte in javascript, questo approccio non funzionerà mai perché non eseguirà o recupererà il javascript. – jiggy

risposta

1

Ora primi alcuni suggerimenti di codifica Java che non risolverà il problema, allora una punta che può.

È necessario refactoring il codice e utilizzare try-finally in cui si chiude il flusso in blocco infine per assicurarsi che si chiude sempre anche quando viene generata un'eccezione. Quindi non vorrei usare il indexOf con un int. Per rendere il codice più nitido, leggibile e meno dettagliato scrivi if(inputLine.toLowerCase().contains("sales")){ direttamente nella tua istruzione if e rimuovi tutto il codice indice.

È possibile provare l'API Apache http://hc.apache.org/httpcomponents-client-ga/index.html per recuperare la home page.

+0

Grazie per i suggerimenti! Tuttavia ho esaminato i componenti http di apache e mentre potevo ottenere i dati come prima ottenevano lo stesso approccio di openstream dell'originale - caricava ancora solo parte della pagina. Ho usato la fonte da: http://hc.apache.org/httpclient-3.x/tutorial.html. Hmmm .. – Chris

Problemi correlati