2011-04-23 1 views
0

J'essaie d'écrire un programme qui lit le code source html du site Web http://judgephilosophies.wikispaces.com. J'ai écrit un code java simple qui lit et sort le code source, mais il affiche simplement "null". Voici la chose bizarre, cependant - si je remplace "http://judgephilosophies.wikispaces.com" dans le code avec tout autre site Web, cela fonctionne très bien. Il semble que ce soit uniquement pour les sites Web du domaine wikispaces.com que le programme ne fonctionne pas, et je suis complètement confus quant à savoir pourquoi. Le code est ci-dessous. L'aide est très appréciée.Problème étrange d'accès à la page Web avec 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

Comment ça marche? - Si le site est un site Ajax, cela ne fonctionnera pas. Le programme que vous avez obtiendra juste le HTML du site. –

+0

@Romain - Non, le serveur redirige. Voir ma réponse ci-dessous. –

Répondre

0

Effectuez une trace HTTP à l'aide de Wireshark ou d'une fonction de comparaison. C'est probablement une question de cookies ou d'en-têtes, si la seule URLConnection agit différemment d'un navigateur.

0

En utilisant wget de la ligne de commande, vous trouverez:

[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] 

Il réoriente (deux fois plus, en fait). Votre URLConnection vide ne gère pas cela. Le code de réponse est dans les en-têtes de sorte que votre programme imprime actuellement null.

Vous devriez vraiment regarder en utilisant HttpUrlConnection car il peut gérer les redirections pour vous. Pour le faire avec URL vous auriez besoin de regarder les en-têtes retournés et d'agir sur les codes de réponse HTTP (ce que fait HttpURLConnection)