2017-01-21 36 views
0

我有代碼塊讀取URL頁面內容的工作,這個代碼工作好了很多頁,但對於一些頁面,如下面的鏈接沒有作用:url.openStream()DOS不是某些網頁

http://www.sciencedirect.com/science/article/pii/S1351421012701725?np=y

public static String getDataFromWebPage(String url) { 
    try { 
     URL urlpage = new URL(url); 
     InputStream is = urlpage.openStream(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
     String line = ""; 
     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
     } 
     br.close(); 
     is.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return ""; 
    } 
} 


public static void main(String[] args) { 
    System.out.println("*******************************"); 
    System.out.println("*******************************"); 
    System.out.println(getDataFromWebPage("http://www.sciencedirect.com/science/article/pii/S1351421012701725?np=y")); 

    System.out.println("*******************************"); 
    System.out.println("*******************************"); 

} 

它需要很多時間,但它不會在輸出中得到任何結果(或任何異常)。

有沒有可能服務器有一些算法沒有從機器人的響應請求?

如何解決這個問題?

+0

作爲一個方面說明,你應該刷新你的緩衝區,因爲關閉並不總是執行完全刷新。我已經這麼幾次了。更好的是,使用資源塊 – gwnp

回答

1

您應該使用httpclient istead。你會在這裏找到一個很好的例子:http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/

+0

其工作良好。 – user3600935

+0

親愛的朋友,如果您嘗試使用此鏈接的代碼,我將非常感激:http://www.sciencedirect.com/science/article/pii/S0278584699000251,有沒有任何安全協議來阻止機器人訪問? – user3600935

+0

我將測試該網站,但您的解決方案應該處理狀態301(http重定向)和cookie。網站返回301和一個cookie。重定向的URL會檢查您是否獲取了Cookie。如果cookie丟失,你被認爲是一個糟糕的機器人。 – Skywalker