2010-10-22 20 views
2

J'essaie de créer une sorte de service Web sur Google Apps.Google App Engine (Java): Réponse à la recherche d'URL Problèmes trop importants

Maintenant, le problème est, j'ai besoin d'obtenir des données à partir d'un site Web (HTML Scraping).

La demande ressemble à:

URL url = new URL(p_url); 
con = (HttpURLConnection) url.openConnection(); 
InputStreamReader in = new InputStreamReader(con.getInputStream()); 
BufferedReader reader = new BufferedReader(in); 

     String result = ""; 
     String line = ""; 
     while((line = reader.readLine()) != null) 
     { 
      System.out.println(line); 
     } 
     return result; 

maintenant App Engine me donne l'exception follwing à la ligne 3th:

com.google.appengine.api.urlfetch.ResponseTooLargeException 

En effet, la limite maximale de la demande est à 1Mo et le total HTML de la page est d'environ 1.5mb.

Maintenant ma question: J'ai seulement besoin des 20 premières lignes du html pour gratter. Est-il possible d'obtenir seulement une partie du code HTML afin que le ResponseTooLargeException ne soit pas levé?

Merci d'avance!

Répondre

2

Résolu le problème en utilisant l'API URLFetch de bas niveau.

Et de définir l'option allowtruncate sur true;

http://code.google.com/intl/nl-NL/appengine/docs/java/javadoc/com/google/appengine/api/urlfetch/FetchOptions.html

Basiquement cela fonctionne comme ceci:

HTTPRequest request = new HTTPRequest(_url, HTTPMethod.POST, Builder.allowTruncate()); 
URLFetchService service = URLFetchServiceFactory.getURLFetchService(); 
HTTPResponse response = service.fetch(request); 
+1

Selon les docs: L'service URL Fetch limite la taille des données pour une requête sortante, et pour une réponse entrante. Lors de l'utilisation de l'API java.net, les données supérieures à la limite sont tronquées de manière silencieuse. L'API URL Fetch de bas niveau permet de spécifier si la troncation se produit en mode silencieux ou si le dépassement d'une limite déclenche une exception –