Bonjour,
J'ai réalisé un petit programme que je lance chaque jour à heure fixe pour récupérer le contenu de plusieurs milliers de page web en "one-shot".
J'extrais les valeurs qui me sont utiles de chaque page, puis je les enregistre dans un fichier xml afin de les mémoriser et de les exploiter dans un autre programme.
Tout fonctionne à l'exception que, quelques fois, le programme qui récupère les données n'arrivent pas à se dérouler jusqu'à son terme.
J'ai réussi à identifier le soucis qui à l'air de venir de cette méthode.
En fait j'ai toujours mon couple "Départ" "Arrivée" sauf pour la dernière page où j'ai ce problème : c'est à dire présence de "Départ" mais pas de "Arrivée" et pas de trace d'une IOException.
Code : 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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public StringBuffer convertContentUrlToStringBuffer(String s_nameUrl){ StringBuffer buffer = new StringBuffer(); System.out.println("Départ"); try { boolean isFirstLine= true; URL url = new URL(s_nameUrl); URLConnection urlConnection = url.openConnection(); InputStream ips = urlConnection.getInputStream(); InputStreamReader ipsr = new InputStreamReader(ips); BufferedReader br = new BufferedReader(ipsr); String line = null; while ((line = br.readLine()) != null) { if(!isFirstLine) { buffer.append('\n'); } buffer.append(line); isFirstLine = false; } ips.close(); ipsr.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } System.out.println("Arrivée"); return buffer; }
Après lecture de la javadoc de URLConnection je pencherais sur une SocketTimeoutException de la méthode "connect" qui ne serait pas "catchée" mais j'ai un doute.
A noter que mon programme est multithreadé, peut-être qu'il y a un nombre limite de connexions simultanées, même si ça m'étonnerait fort. En tout cas ça pourrait expliquer ce côté aléatoire...
Je voulais donc savoir si ma façon de procéder vous semblait correcte ? Et comment palier ce problème ?
Rajouter un :
catch (SocketTimeoutException ste)
{
}
Et mettre tout le contenu de cette fonction dans un while afin d'authoriser X relecture pour justement ne plus être en "one-shot" ?
Partager