我正在尝试在谷歌应用程序上构建某种网络服务。
现在的问题是,我需要从网站获取数据(HTML 抓取)。
该请求如下所示:
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;
现在 App Engine 在第 3 行给出了以下异常:
com.google.appengine.api.urlfetch.ResponseTooLargeException
这是因为最大请求限制为 1mb,而页面的总 HTML 约为 1.5mb。
现在我的问题是:
我只需要抓取 html 的前 20 行。有没有办法只获取 HTML 的一部分,这样就不会抛出 ResponseTooLargeException ?
提前致谢!
通过使用低级 URLFetch api 解决了该问题。
并将allowtruncate选项设置为true;
http://code.google.com/intl/nl-NL/appengine/docs/java/javadoc/com/google/appengine/api/urlfetch/FetchOptions.html http://code.google.com/intl/nl-NL/appengine/docs/java/javadoc/com/google/appengine/api/urlfetch/FetchOptions.html
基本上它的工作原理是这样的:
HTTPRequest request = new HTTPRequest(_url, HTTPMethod.POST, Builder.allowTruncate());
URLFetchService service = URLFetchServiceFactory.getURLFetchService();
HTTPResponse response = service.fetch(request);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)