J'essaie d'obtenir un certain cookie dans un client java en créant une série de requêtes Http. Il semble que je reçois un cookie valide du serveur mais quand j'envoie une requête à l'URL fnal avec le cookie apparemment valide, je devrais obtenir quelques lignes de XML dans la réponse mais la réponse est vide parce que le cookie est faux ou est invalidé parce qu'une session s'est fermée ou un autre problème que je ne peux pas comprendre. Le cookie distribué par le serveur expire à la fin de la session.Envoyer un cookie avec une requête HTTP en Java
Il me semble que le cookie est valide car lorsque je fais les mêmes appels dans Firefox, un cookie similaire portant le même nom et commençant par les 3 premières mêmes lettres et de la même longueur est stocké dans firefox, expirant également à la fin de la session. Si je fais ensuite une demande à l'url finale avec seulement ce cookie particulier stocké dans firefox (supprimé tous les autres cookies), le xml est bien rendu sur la page.
Des idées sur ce que je fais de mal dans ce morceau de code? Une autre chose, lorsque j'utilise la valeur du cookie très similaire généré et stocké dans Firefox dans ce morceau de code, la dernière requête donne des informations XML dans la réponse HTTP.
// Validate
url = new URL(URL_VALIDATE);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Cookie", cookie);
conn.connect();
String headerName = null;
for (int i = 1; (headerName = conn.getHeaderFieldKey(i)) != null; i++) {
if (headerName.equals("Set-Cookie")) {
if (conn.getHeaderField(i).startsWith("JSESSIONID")) {
cookie = conn.getHeaderField(i).substring(0, conn.getHeaderField(i).indexOf(";")).trim();
}
}
}
// Get the XML
url = new URL(URL_XML_TOTALS);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Cookie", cookie);
conn.connect();
// Get the response
StringBuffer answer = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
answer.append(line);
}
reader.close();
//Output the response
System.out.println(answer.toString())
Avez-vous déjà pensé à simplement passer au client http commun? http://hc.apache.org/httpclient-3.x/ – leonm
On dirait que vous faites tout cela très manuellement. Je ne sais pas comment vous gérez l'expiration de la session. Si vous aviez tout le code de votre serveur dans une servlet, ce serait beaucoup plus facile. Est-ce une option? – John