2010-01-11 39 views
5

Tôi đang tìm nạp một trang web bằng cách sử dụng Apache httpcomponents Java library. Sau khi kết nối kết quả tôi nhận được là HttpEntity có phương thức getContent() trả về một InputStream và cũng có phương thức writeTo() ghi vào OutputStream.Trong httpclient cách thanh lịch/chính xác nhất để biến HttpEntity thành một chuỗi là gì?

Tôi muốn chuyển kết quả thành Chuỗi để trích xuất thông tin. Cách thanh lịch nhất (và an toàn) để làm điều này là gì?

Một số giải pháp khả thi:

  • Viết thư cho một ByteArrayOutputStream và sau đó chuyển đổi những byte vào một String với một constructor Chuỗi
  • sử dụng InputStreamReader để đọc trực tiếp từ suối, và đưa vào một StringBuilder

Cả hai cảm giác này đều hơi xấu xí. Bạn có đề nghị chọn một trong những thứ này hay cái gì khác không?

Trả lời

4

gì về (giả):

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

Bạn sẽ phải xử lý ngoại lệ trên của riêng bạn trong trường hợp này.

0

Có thể xấu xí, nhưng tôi nghĩ đó là cách duy nhất để làm điều đó. Bạn có thể sử dụng IOUtils.toString() từ Commons-IO mặc dù không cần phải viết mã của riêng bạn.

6

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

+0

Tôi nghĩ đây là câu trả lời chính xác, thư viện cung cấp lớp EntityUtils vì lý do chính xác này –

+0

Vấn đề với cách tiếp cận này là nếu bạn đã dọn sạch tài nguyên bằng cách gọi httpResponse.close() và muốn nhận biểu diễn chuỗi của thực thể ở nơi khác, sử dụng mã trên sẽ gây ra một ngoại lệ "java.net.SocketException: socket closed" được ném ra. –

Các vấn đề liên quan