Java中的Apache HttpClient,instream.toString = org.apache.http.conn.EofSensorInputStream

我正在使用Apache HttpClient获取一个页面,我想将服务器回复的http主体存储到一个字符串中,这样我就可以操作这个字符串并将其打印到控制台。

不幸的是,在运行此方法时,我收到此消息:

17:52:01,862 INFO Driver:53 - fetchPage STARTING 17:52:07,580 INFO Driver:73 - fetchPage ENDING, took 5716 org.apache.http.conn.EofSensorInputStream@5e0eb724 

fetchPage类:

 public String fetchPage(String part){ log.info("fetchPage STARTING"); long start = System.currentTimeMillis(); String reply; String searchurl = URL + URL_SEARCH_BASE + part + URL_SEARCH_TAIL; HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(searchurl); HttpResponse response; try { response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); int l; byte[] tmp = new byte[2048]; while ((l = instream.read(tmp)) != -1) { } long elapsedTimeMillis = System.currentTimeMillis()-start; log.info("fetchPage ENDING, took " + elapsedTimeMillis); reply = instream.toString(); System.out.println(reply); return reply; } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } 

在您已经读完后,您正在调用InputStream上的toString。 您需要从字节数组创建字符串。 获取内容的String版本的更简单方法是使用EntityUtils.toString(HttpEntity)

确切的impl看起来像:

 import org.apache.http.util.EntityUtils; public String fetchPage(String part){ log.info("fetchPage STARTING"); long start = System.currentTimeMillis(); String reply; String searchurl = URL + URL_SEARCH_BASE + part + URL_SEARCH_TAIL; HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(searchurl); HttpResponse response; try { response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { return EntityUtils.toString(entity); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }