2010-11-18 6 views
2

Я хочу, чтобы получить содержимое страницы из URL с помощью этого кода:Получить содержимое страницы по 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(); 
} 

Но с этим URL: http://portal.acm.org/citation.cfm?id=152610.152611&coll=DL&dl=GUIDE&CFID=114782066&CFTOKEN=85539315 я не могу получить Asbtract: Системы управления базами данных будет продолжать управлять .....

Можете ли вы дать мне решение проблемы решения? Заранее спасибо

+0

Возможный дубликат: http://stackoverflow.com/questions/1255730/java-retrieve-html-page-in-proper-encoding –

+0

@Matt Ball проблема заключается в том, что OP требуется JavaScript для выполнения, чтобы получить желаемого содержания, и в этом смысле вопрос принципиально отличается. –

ответ

3

Выведение заголовок запроса 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 

Это означает, что сервер хочет загружать адрес новые места. Таким образом, либо вы получаете заголовок прямо из UrlConnection и следуете этой ссылке, либо автоматически используете HttpClient, который автоматически следует переадресации. Код основан на 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

Можете ли вы recomen меня использовать lib для этого кода, потому что я не могу запустить его с httpcore от apache! – tiendv

+1

Я могу запустить ваш код! Но результат же с моим кодом? не могли бы вы дать какое-либо предложение – tiendv

+0

@tiendv: Я просто попробовал этот код, и я получил перенаправленную страницу, как и ожидалось, что вы пытаетесь получить? – dacwe

0

Нет данных «Управление базой данных ...» на указанном URL-адресе. Возможно, он загружается javascript динамически. Для загрузки такого контента вам понадобится более сложное приложение;)

0

Содержание, которое вы ищете, не включено в этот URL. Откройте ваш браузер и просмотрите исходный код. Вместо этого загружаются многие файлы javascript. Я думаю, что контент будет получен позже через вызовы AJAX. Вам нужно будет узнать, как загружается контент.

Fibfox Plugin Firebug может быть полезен для более детального анализа.

0

URL, что вы должны использовать это:

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

Поскольку исходный URL вы писали (как уже упоминалось dacwe) посылает переадресацию.

Смежные вопросы