2013-08-25 137 views
3

我想通過Java中的URL獲取HTML。但是301 Moved Permanently就是我所擁有的。另一個URL可以工作。怎麼了?這是我的代碼:301永久移動

hh= new URL("http://hh.ru"); 
     in = new BufferedReader(
       new InputStreamReader(hh.openStream())); 


     while ((inputLine = in.readLine()) != null) { 

      sb.append(inputLine).append("\n"); 
      str=sb.toString();//returns 301 


     } 
+0

如果另一個URL的作品,所以沒有任何事情你的代碼錯誤,是http://hh.ru有效的網址? – Soosh

+0

當我訪問該URL時,我得到一個301重定向。這裏是一個鏈接到重定向後面的代碼:http://stackoverflow.com/questions/1884230/java-doesnt-follow-redirect-in-urlconnection – dcaswell

回答

10

您正面臨重定向到其他網址。這是很正常的,網站可能有很多原因來重定向你。只要按照基於「Location」 HTTP標題那樣重定向:

URL hh= new URL("http://hh.ru"); 
URLConnection connection = hh.openConnection(); 
String redirect = connection.getHeaderField("Location"); 
if (redirect != null){ 
    connection = new URL(redirect).openConnection(); 
} 
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
String inputLine; 
System.out.println(); 
while ((inputLine = in.readLine()) != null) { 
    System.out.println(inputLine); 
} 

您的瀏覽器重定向之後automaticaly,但使用的URLConnection你應該做你自己吧。如果您不明白其他Java HTTP client實現,請參閱Apache HTTP Client。他們中的大多數都能夠自動執行重定向。

+0

但是這顯示了我的移動版本的HTML。看看https://m.hh.ru。我想要完整版本。 – Tony

+0

它看起來像版本取決於你設置的用戶代理。這個在我的測試中給出了一個完整版本:connection.setRequestProperty(「User-Agent」,「Mozilla/5.0(Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2)Gecko/20100316 Firefox/3.6.2" ); – Jk1

+0

哇。完全有效! – Tony

0

你的代碼沒有問題。該消息表示hh.ru已永久移動到另一個域。

0

我測試了你的代碼並且沒問題,但是當我使用「hh.ru」時,和你的問題一樣,並且當我使用lynx(命令行瀏覽器)連接到「hh.ru」時,它會告訴我,這是重定向到另一個網址,然後告訴我,它被永久移動,之後此警報:
「警告!:該客戶端不包含HTTPS URL中支持」

0

發現這個答案是有用的和改進的有一點是由於多次重定向的可能性(例如307,301)。

URLConnection urlConnection = url.openConnection(); 
       String redirect = urlConnection.getHeaderField("Location"); 
       for (int i = 0; i < MAX_REDIRECTS ; i++) { 
        if (redirect != null) { 
         urlConnection = new URL(redirect).openConnection(); 
         redirect = urlConnection.getHeaderField("Location"); 
        } else { 
         break; 
        } 
       } 
0

我解決了我的問題,當我把特定的文件運行在服務器上。 而不是http://hh.ru 我用http://hh.ru/index.php 它爲我