2011-09-07 41 views
5

Tôi đang đọc từ một url trong mã java của tôi nhưng trang tôi muốn đọc thực hiện lệnh khi được tải và InputStreamReader đọc trang trước khi nó được tải hoàn toàn, do đó, trình đọc đệm của tôi chỉ thu thập HTML trên trang trước khi nội dung thực được tải.Đợi đến khi trang được tải trước khi đọc nội dung từ một URL trong Java

Mục tiêu chính của tôi là tìm từ "bán hàng" trên trang, nhưng tôi không thể làm điều này nếu luồng được mở được kết nối trước khi toàn bộ trang được tải. Có cách nào để chờ nó tải hay gì đó không?

Đây là mã của tôi:

URL url = new URL("http://urlgoeshere.com?"+ withAParam); 
     URLConnection uc = url.openConnection(); 
     uc.connect(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); 
     String inputLine = in.readLine(); 
     int index = -1;    
     while ((inputLine = in.readLine()) != null){ 
      index=inputLine.toLowerCase().indexOf("sales"); 
      if(index>=0){ 
      log.info("Found sales!"); 
       break;     
      } 
     } 
     if (in != null){ 
      in.close(); 
     } 
+0

Điều này không có ý nghĩa. 'BufferedReader' sẽ đọc trang tuần tự cho đến khi luồng không có nhiều nội dung hơn. Bất kỳ thứ gì mà trang viết sẽ được đọc. Nếu trang là động, nó vẫn sẽ nhận nội dung. Nếu các hành động tải sau được thực hiện trong javascript, thì cách tiếp cận này sẽ không bao giờ hoạt động vì nó sẽ không thực thi hoặc thậm chí tìm nạp javascript. – jiggy

Trả lời

1

Bây giờ đầu tiên một số lời khuyên Java mã hóa đó sẽ không giải quyết vấn đề của bạn thì một mẹo mà có thể.

Bạn nên cấu trúc lại mã của mình và sử dụng try-finally nơi bạn đóng luồng trong cuối cùng chặn để đảm bảo mã luôn đóng ngay cả khi ngoại lệ được ném. Sau đó, tôi sẽ không sử dụng indexOf với một int. Để làm cho mã viết rõ ràng hơn, dễ đọc hơn và ít tiết hơn, hãy viết if(inputLine.toLowerCase().contains("sales")){ trực tiếp trong câu lệnh if của bạn và xóa tất cả mã chỉ mục.

Bạn có thể thử API apache http://hc.apache.org/httpcomponents-client-ga/index.html để tìm nạp trang chủ.

+0

Cảm ơn các mẹo! Tuy nhiên tôi nhìn vào httpcomponents apache và trong khi tôi có thể nhận được dữ liệu như trước khi nó có giống như phương pháp tiếp cận nguồn mở url gốc - nó vẫn chỉ tải một phần của trang. Tôi đã sử dụng nguồn từ: http://hc.apache.org/httpclient-3.x/tutorial.html. Hmmm .. – Chris

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