2010-12-10 59 views
2

Je dois te connecter à un site Web, cliquez sur quelques liens vers un dernier écran pour télécharger des données, voici les étapes:HttpClient ne retourne pas le code source html terminée

  • Etape 1: Connectez-vous au site sur la première page;
  • étape2: cliquez sur un lien «voir» sur la première page pour accéder à la deuxième page;
  • étape3: sur la deuxième page, mettre en 'numéro de compte', cliquez sur le bouton soumettre pour obtenir les nombreuses lignes de données affichées, j'appelle cela comme troisième page) (j'obtiens l'URL directe à la troisième page, en collant cette URL dans la barre d'adresse du navigateur, la troisième page est affichée correctement)

est mon problème ici: J'utilise HttpClient. Il a passé la page de connexion, et il peut arriver à la troisième page, mais seulement retourner la partie statique sur la page, la partie des données générées dynamiquement basée sur l'entrée «numéro de compte» n'est pas retournée.

Voici le code:

HttpClient client = new HttpClient(); 
client.getHostConfiguration().setHost(loginUrl); 

PostMethod postMethod = new PostMethod(serverUrl); 
// Prepare login parameters 
NameValuePair[] data = { 
    new NameValuePair("passUID",account), 
    new NameValuePair("passUCD",password) 
}; 

postMethod.setRequestBody(data); 
// I can print out the html code of the login page here 

//request the third page with URL: serverUrl4 
postMethod = new PostMethod(serverUrl4); 
    NameValuePair[] data2 = { 
       new NameValuePair("passUID",account), 
       new NameValuePair("passUCD",""), 
       new NameValuePair("page", "view"), 
       new NameValuePair("procacct", "0"), 
       new NameValuePair("AcctNo", "xxxxxxxxx") 
    }; 

postMethod.setRequestBody(data2); 
client.executeMethod(postMethod); 
byte[] responseBody = postMethod.getResponseBody(); 

Si je colle l'URL avec namevaluepairs ci-dessus dans l'URL du navigateur, les données de compte est affiché correctement. Mais le corps de réponse ne renvoie pas les données de compte générées dynamiquement, rien d'autre n'est renvoyé mais la section des 'données de compte'.

Est-ce que quelqu'un sait pourquoi? Toute aide est grandement appréciée.

Répondre

2

Est-ce que la page en question utilise JavaScript pour générer ces données? Si c'est le cas, HTTPClient ne sera pas suffisant pour obtenir ce que vous voulez.

+0

merci Andrew! il s'agit de données générées par JavaScript. Pouvez-vous s'il vous plaît conseiller quelque chose pour résoudre ce problème? – swei

+0

non sans en savoir beaucoup plus sur la page cible. Si c'est juste faire un appel ajax à un webservice, vous pouvez être en mesure d'émuler cela, mais si elle fait des calculs à la volée alors vous pourriez ne pas avoir de chance. –

0

Généralement, il y aura une requête redirect (HTTP/1.1 302) du serveur après le POST, vérifiez le code d'état des réponses du serveur. Vous devez également fournir cookies utilisé par le serveur pour identifier les utilisateurs connectés.

Edit:

souhaits cet extrait de code aide:

if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) { 
    Header locationHeader = postMethod.getResponseHeader("location"); 
    if (locationHeader != null) { 
     String location = locationHeader.getValue(); 
     System.out.println("The page was redirected to:" + location); 
     /* **strong text** 
     here is code to handle redirect to 
     "location" got from response headers 
     */ 
    } else { 
      System.err.println("Location field value is null."); 
    } 
} 
+0

Merci, le serveur retourne SC_OK après la publication. – swei