2015-10-09 55 views
0

我想訪問該鏈接http://www.nation.co.ke/business/seedsofgold/Egg-imports-from-Uganda-hatch-big-losses-for-farmers/-/23/2897930/-/dpeqesz/-/index.html可公開訪問的URL拋出IOException異常

的聯繫是公開訪問,甚至可以加載使用curl

但在Java代碼,它拋出Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.nation.co.ke/business/seedsofgold/Egg-imports-from-Uganda-hatch-big-losses-for-farmers/-/23/2897930/-/dpeqesz/-/index.html

這是代碼:

/** 
* 
* @param url the HTML page 
* @throws IOException 
*/ 
public static String getPage(String url) throws IOException { 
    URL u = new URL(url); 
    URLConnection conn = u.openConnection(); 

    String mime = conn.getContentType(); 
    if(!StringUtils.containsIgnoreCase(mime, "text/html")) { 
     return null; // don't continue if not HTML 
    } 
    else { 

     // read the response body, using BufferedReader for performance 
     InputStream in = conn.getInputStream(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in, Charset.defaultCharset())); 
     int n = 0, totalRead = 0; 
     char[] buf = new char[1024]; 
     StringBuilder content = new StringBuilder(); 

     // read until EOF or first 16384 characters 
     while (totalRead < 16384 && (n = reader.read(buf, 0, buf.length)) != -1) { 
      content.append(buf, 0, n); 
      totalRead += n; 
     } 
     reader.close(); 

} 

該錯誤是在拋出:

 InputStream in = conn.getInputStream(); 

相同的代碼可以很好地與其他URL一起使用。

回答

1

嘗試URLConnection conn = u.openConnection();後立即

conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"); 

添加到您的連接。許多網站在未設置正確代理時阻止網站訪問。

+0

這樣做了。謝謝。 –

1

如果您正在獲取HTTP 403狀態代碼,則表示由於某種原因禁止訪問由URL標識的資源。

Web服務器可能會響應客戶端對網頁或資源的請求返回403 Forbidden HTTP狀態碼,以指示可以到達服務器並理解請求,但拒絕採取任何進一步的操作。

你可以參考HTTP 403 status code

+0

很好解釋.. –

+0

只有通過'URLConnection'訪問時纔會出現403錯誤。該頁面在瀏覽器中正確加載,甚至通過'curl'。有關解決方案,請參閱@ScreamingTree –

+0

的答案您只需添加User-agent頭。 –