2010-11-18 9 views
2

Ich möchte durch diesen Code von URL Inhalt der Seite bekommen:Holen Sie Seiteninhalt von 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(); 
} 

Aber mit dieser URL: http://portal.acm.org/citation.cfm?id=152610.152611&coll=DL&dl=GUIDE&CFID=114782066&CFTOKEN=85539315 i Asbtract bekommen kann nicht: Datenbank-Management-Systeme werden weiterhin ..... verwalten

Können Sie mir eine Lösung für ein Problem geben? Vielen Dank im Voraus

+0

Mögliche dup: http://stackoverflow.com/questions/1255730/java-retrieve-html-page-in-proper-encoding –

+0

@Matt Ball das Problem hier ist, dass das OP benötigt JavaScript ausführen, um zu bekommen gewünschter Inhalt, und in diesem Sinne ist die Frage grundlegend anders. –

Antwort

3

Ausgabe den Header der Erhaltungs-Anforderung:

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 

Dies bedeutet, dass der Server will, dass Sie die neuen Standorte Adresse zum Download bereit. Entweder Sie erhalten den Header direkt von der UrlConnection und folgen diesem Link oder Sie verwenden automatisch HttpClient, die automatisch Weiterleitungen folgen. Der folgende Code basiert auf 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

kannst du mir recomen welche lib für diesen code benutze weil ich es nicht mit httpcore von apache ausführen kann! – tiendv

+1

Ich kann Ihren Code ausführen! Aber das Ergebnis gleich mit meinem Code? Könnten Sie irgendeinen Vorschlag geben – tiendv

+0

@tiendv: Ich habe gerade diesen Code versucht und ich bekomme die umgeleitete Seite wie erwartet, was versuchst du zu bekommen? – dacwe

0

Es gibt kein „Datenbank-Management ...“ auf bestimmte URL. Vielleicht wird es dynamisch von Javascript geladen. Sie benötigen anspruchsvollere Anwendung haben solche Inhalte zum Download;)

0

Der Inhalt Sie suchen ist nicht in dieser URL enthalten. Öffnen Sie Ihren Browser und sehen Sie sich den Quellcode an. Stattdessen werden viele Javascript-Dateien geladen. Ich denke, der Inhalt wird später durch AJAX-Aufrufe abgerufen. Sie müssten lernen, wie der Inhalt geladen wird.

Das Firfox Plugin Firebug könnte hilfreich sein für eine detaild analysieren.

0

Die URL, die Sie ist verwenden sollten:

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

Da die ursprüngliche URL Sie auf dem Laufenden (wie von dacwe erwähnt) sendet umleiten.