2010-01-11 392 views
5

我使用Apache httpcomponents Java library提取網頁。連接結果後,我得到的是一個HttpEntity,它有一個方法getContent(),它返回一個InputStream,並且還有一個方法writeTo()寫入OutputStream。在httpclient中,將HttpEntity轉換爲字符串的最優雅/正確的方法是什麼?

我想將結果轉換爲字符串來提取信息。什麼是最優雅(和安全)的方式來做到這一點?

一些可能的解決方案:

  • 寫入ByteArrayOutputStream,然後將這些字節轉換爲字符串用String構造
  • 使用的InputStreamReader從流中直接讀取,並放入一個StringBuilder

這兩個都覺得有點難看。你會推薦選擇其中之一還是其​​他的?

回答

4

什麼(僞):

BasicResponseHandler handler = new org.apache.http.impl.client.BasicResponseHandler();  
String str = httpClient.execute(request, handler); 

你將不得不處理在自己的異常在這種情況下。

0

它可能很醜,但我認爲這是做到這一點的唯一方法。您可以使用Commons-IO的IOUtils.toString(),但無需編寫自己的代碼。

6

System.out.println(EntityUtils.toString(httpResponse.getEntity()));

+0

我認爲這裏是正確的答案,圖書館提供了正是這個原因的EntityUtils類 – 2012-12-26 21:43:37

+0

這種方法的問題是,如果你已經通過調用httpResponse.close()清理了資源並且想要獲得其他地方的實體的字符串表示,使用上面的代碼將導致拋出「java.net.SocketException:套接字關閉」異常。 – 2013-12-21 15:21:19

相關問題