Bonjour,

J'essaie désespérément de requêter le site "termobile.fr", hors ce site est extrêmement mal fait : lorsqu'on souhaite rechercher une gare, plutôt que de simplement envoyer le formulaire il va placer les infos du formulaire en session (donc cookie de session obligatoire) et rediriger vers la page des résultats.
Et sur chaque page, si le cookie de session n'est pas là, on est redirigé à l'accueil.

Ma première étape est donc de récupérer le cookie de session. Après, j'ose espérer que ça suivra son cours.

Voici un code qui fonctionne en PHP :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
curl_setopt($s, CURLOPT_HTTPHEADER, array(
  'Keep-Alive: 300',
  'Connection: keep-alive',
  'Cache-Control: max-age=0',
));
curl_setopt($s, CURLOPT_TIMEOUT, 10);
curl_setopt($s, CURLOPT_MAXREDIRS, 4);
curl_setopt($s, CURLOPT_RETURNTRANSFER, true);
curl_setopt($s, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8 GTB6');
curl_setopt($s, CURLOPT_HEADER, true);
curl_setopt($s, CURLOPT_NO_BODY, true);
curl_setopt($s, CURLOPT_URL, 'http://www.termobile.fr/pages/imode/accueil.jsp');
$header_string = curl_exec($s);
$header = http_parse_headers($header_string);
$cookie = $header['Set-Cookie'];

J'essaie de faire la même chose en Java (le langage est contraint sur mon projet), mais là c'est l'échec.
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
URL url = new URL("http://www.termobile.fr/pages/imode/accueil.jsp");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Keep-Alive", "300");
connection.setRequestProperty("Connection", "keep-alive");
connection.setRequestProperty("Cache-Control", "max-age=0");
connection.setReadTimeout(10000);
// ??? curl_setopt($s, CURLOPT_MAXREDIRS, 4);
// ??? curl_setopt($s, CURLOPT_RETURNTRANSFER, true);
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8 GTB6");
// ??? curl_setopt($s, CURLOPT_HEADER, true);
// ??? curl_setopt($s, CURLOPT_NO_BODY, true);
connection.setRequestMethod("GET");
connection.connect();
 
Map<String, List<String>> headers = connection.getHeaderFields();
sessionCookie = connection.getHeaderField("Set-Cookie");

Comme vous le voyez, il y a certaines instructions cUrl que je n'ai pas su traduire en Java.

Pour info, voici les headers complets que je reçois avec la connection Java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
{
  keep-alive=[timeout=15, max=100], 
  content-type=[text/html;charset=ISO-8859-1], 
  content-length=[1044], 
  date=[Mon, 08 Mar 2010 23:59:51 GMT], 
  server=[Apache-Coyote/1.1], 
  connection=[Keep-Alive]
}
Je pensais que ce que je souhaitais faire était simple, mais j'ai beau essayer avec HttpClient (du package org.apache.http.client) ou en extrayant le contenu de la page (j'ai lu que mon problème pouvait aussi venir de la connexion keep-alive), j'ai systématiquement la même réponse.
Je n'ai hélas pas assez de connaissances dans le protocole HTTP pour comprendre exactement ce qui se passe.