2011-04-23 56 views
0

我正在嘗試編寫一個程序來讀取網站http://judgephilosophies.wikispaces.com的html源代碼。我寫了一些簡單的java代碼,讀取和輸出源代碼,但它只是輸出「null」。然而,這是件奇怪的事情 - 如果我在代碼中將「http://judgephilosophies.wikispaces.com」替換爲任何其他網站,它就可以正常工作。它似乎只針對wikispaces.com域中的網站,該程序不起作用,並且我完全糊塗了爲什麼。代碼如下。非常感謝幫助。用Java訪問網頁的奇怪問題

import java.io.*; 
import java.net.*; 

public class AccessWebExample 
{ 
    public static void main (String[] args) throws Exception 
    { 
     //Create reader to access html source code 
     URL url = new URL ("http://judgephilosophies.wikispaces.com/"); 
     InputStreamReader isr = new InputStreamReader (url.openStream()); 
     BufferedReader reader = new BufferedReader (isr); 

     //Read and print the text 
     do 
     { 
      System.out.println(reader.readLine()); 
     } 
     while(reader.readLine() != null); 
    } 
} 
+0

它是如何工作的? - 如果該網站是一個Ajax網站,那麼它將無法工作。您擁有的程序只會從網站獲取HTML。 – 2011-04-23 19:44:08

+0

@Romain - 不,服務器重定向。請參閱下面的答案。 – 2011-04-23 19:51:37

回答

0

使用Wireshark或其他方法進行HTTP跟蹤並進行比較。如果裸URLConnection的行爲與瀏覽器不同,那麼這可能是cookie或標題的問題。

0

使用wget在命令行中,你會發現:

[email protected]:~$ wget http://judgephilosophies.wikispaces.com/ 
--2011-04-23 14:50:31-- http://judgephilosophies.wikispaces.com/ 
Resolving judgephilosophies.wikispaces.com... 208.43.192.33, 75.126.104.177 
Connecting to judgephilosophies.wikispaces.com|208.43.192.33|:80... connected. 
HTTP request sent, awaiting response... 302 Found 
Location: https://session.wikispaces.com/1/auth/auth?authToken=e8ad55c0e2701a0e7da89807255609da [following] 

它重定向(一對夫婦多次,實際上)。你的裸URLConnection不處理。響應代碼位於標題中,因此您的程序當前輸出爲空。

你真的應該看看使用HttpUrlConnection,因爲它可以爲你處理重定向。要做到這一點與URL將需要你看看返回的頭文件和HTTP響應代碼(這是HttpURLConnection做什麼)