2010-11-18 6 views
2

Je veux obtenir le contenu de la page d'URL par ce code:Obtenir le contenu de la page à partir de l'URL?

public static String getContentResult(URL url) throws IOException{ 

    InputStream in = url.openStream(); 
    StringBuffer sb = new StringBuffer(); 

    byte [] buffer = new byte[256]; 

    while(true){ 
     int byteRead = in.read(buffer); 
     if(byteRead == -1) 
      break; 
     for(int i = 0; i < byteRead; i++){ 
      sb.append((char)buffer[i]); 
     } 
    } 
    return sb.toString(); 
} 

Mais avec cette URL: http://portal.acm.org/citation.cfm?id=152610.152611&coll=DL&dl=GUIDE&CFID=114782066&CFTOKEN=85539315 je ne peux pas Asbtract: les systèmes de gestion de base de données continuera à gérer .....

Pouvez-vous me donner une solution pour résoudre le problème? Merci d'avance

+0

Dup possible: http://stackoverflow.com/questions/1255730/java-retrieve-html-page-in-proper-encoding –

+0

@Matt Ball le problème ici est que l'OP a besoin de JavaScript pour s'exécuter afin d'obtenir contenu souhaité, et en ce sens la question est fondamentalement différente. –

Répondre

3

l'en-tête de Restitution de la demande get:

HTTP/1.1 302 Moved Temporarily 
Connection: close 
Date: Thu, 18 Nov 2010 15:35:24 GMT 
Server: Microsoft-IIS/6.0 
location: http://portal.acm.org/citation.cfm?id=152610.152611&coll=DL&dl=GUIDE 
Content-Type: text/html; charset=UTF-8 

Cela signifie que le serveur vous souhaite télécharger la nouvelle adresse endroits. Donc soit vous obtenez l'en-tête directement depuis UrlConnection et suivez ce lien, soit vous utilisez automatiquement HttpClient qui suivent automatiquement les redirections. Le code ci-dessous est basé sur HttpClient:

public class HttpTest { 
    public static void main(String... args) throws Exception { 

     System.out.println(readPage(new URL("http://portal.acm.org/citation.cfm?id=152610.152611&coll=DL&dl=GUIDE&CFID=114782066&CFTOKEN=85539315"))); 
    } 

    private static String readPage(URL url) throws Exception { 

     DefaultHttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(url.toURI()); 
     HttpResponse response = client.execute(request); 

     Reader reader = null; 
     try { 
      reader = new InputStreamReader(response.getEntity().getContent()); 

      StringBuffer sb = new StringBuffer(); 
      { 
       int read; 
       char[] cbuf = new char[1024]; 
       while ((read = reader.read(cbuf)) != -1) 
        sb.append(cbuf, 0, read); 
      } 

      return sb.toString(); 

     } finally { 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 
+0

pouvez-vous recomen moi quelle lib utiliser pour ce code parce que je ne peux pas l'exécuter avec httpcore d'Apache! – tiendv

+1

Je peux exécuter votre code! Mais le résultat est le même avec mon code? pourriez-vous donner n'importe quelle suggestion? – tiendv

+0

@tiendv: J'ai juste essayé ce code et j'ai obtenu la page redirigée comme prévu, qu'est-ce que vous essayez d'obtenir? – dacwe

0

Il n'y a pas de "Gestion de base de données ..." sur une URL donnée. Peut-être, il est chargé par javascript dynamiquement. Vous aurez besoin d'une application plus sophistiquée pour télécharger un tel contenu;)

0

Le contenu que vous recherchez n'est pas inclus dans cette URL. Ouvrez votre navigateur et affichez le code source. Au lieu de cela, de nombreux fichiers javascript sont chargés. Je pense que le contenu est récupéré plus tard par les appels AJAX. Vous auriez besoin d'apprendre comment le contenu est chargé. Le Firefox Plugin Firebug pourrait être utile pour une analyse plus détaillée.

0

L'URL que vous devez utiliser est:

http://portal.acm.org/citation.cfm?id=152610.152611&coll=DL&dl=GUIDE 

Parce que l'URL d'origine que vous avez publié (comme mentionné par dacwe) envoie redirect.

Questions connexes