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 package com.drazzib.netpisteur.loader;
28
29 import java.io.BufferedReader;
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.io.InputStreamReader;
33 import java.net.HttpURLConnection;
34 import java.net.URL;
35
36 import org.apache.commons.logging.Log;
37 import org.apache.commons.logging.LogFactory;
38
39 /**
40 * <P>
41 * <STRONG>Description </STRONG>
42 * <P>
43 * Manage the connection with a server and get the content of the Url with the
44 * method getObject
45 *
46 * @see com.drazzib.netpisteur.loader.Connexion
47 * @version 1.0
48 * @since 2002/03/18
49 * @author NetPisteur Team
50 */
51
52 public class ConnexionHttp extends Connexion {
53
54 private static Log log = LogFactory.getLog(ConnexionHttp.class);
55
56
57
58
59 /**
60 * Represents the Http connection
61 */
62 private HttpURLConnection connexionHttp;
63
64 private String messageErreur;
65
66 private boolean connecte;
67
68
69
70
71 /**
72 * Represents an error code for stream reader
73 */
74 static final int LECTURE_FLUX_IMPOSSIBLE = 6;
75
76
77
78
79 /**
80 * Creates a ConnexionHttp object using the class httpUrlConnection
81 *
82 * @param uneUrl :
83 * uneUrl
84 *
85 */
86 public ConnexionHttp(URL uneUrl) {
87 super(uneUrl);
88 this.connexionHttp = null;
89 this.messageErreur = null;
90 this.connecte = false;
91 HttpURLConnection.setFollowRedirects(true);
92 }
93
94
95
96
97 /**
98 * Gets the Url of the connection. This method redifines the Connexion
99 * getUrl() method by checking if the connection to this Url is possible
100 *
101 * @return URL: url of this connection
102 */
103 public URL getTheUrl() {
104
105 if (this.connecte) {
106 return this.url;
107
108 }
109 return null;
110
111 }
112
113 /**
114 * Is the connection made ?
115 *
116 * @return boolean : return false is the connection to this url is
117 * impossible
118 */
119 public boolean getConnecte() {
120 return (this.connecte);
121 }
122
123 /**
124 * Gives the current error message
125 *
126 * @return String : the current error message
127 */
128 public String getMessageErreur() {
129 return (this.messageErreur);
130 }
131
132
133
134
135 /**
136 * Opens a http connection using a url and checking the errors
137 *
138 * @return boolean : success or failure
139 */
140 public boolean connexion() {
141
142 int typeErreur;
143 boolean lectureFluxPossible = false;
144
145 this.messageErreur = null;
146
147 try {
148
149
150 this.connexionHttp = (HttpURLConnection) (this.url)
151 .openConnection();
152
153
154
155
156 this.connexionHttp
157 .setRequestProperty("User-Agent", "Netpisteur v2");
158
159
160
161 this.connexionHttp.setRequestProperty("Connection", "close");
162 this.connexionHttp.setRequestProperty("Proxy-Connection", "close");
163 this.connexionHttp.connect();
164
165
166 typeErreur = this.connexionHttp.getResponseCode();
167
168
169 this.messageErreur = traitementErreur(typeErreur);
170
171 lectureFluxPossible = this.connexionHttp.getDoInput();
172
173 if (!lectureFluxPossible) {
174 this.messageErreur = traitementErreur(LECTURE_FLUX_IMPOSSIBLE);
175 }
176
177 } catch (java.io.IOException exWithOpenConnection) {
178 this.messageErreur = "Connexion a l'url : " + getURL()
179 + " impossible \n";
180 }
181
182 return this.connecte;
183 }
184
185 /**
186 * Sends a request to the serveur 1-It deconnects the previous connection
187 * 2-Gets the last url used in the connectionHttp 3-Builds a new url with
188 * the parameters to send 4-Opens a new connection with this new url
189 *
190 * @param parametre :
191 * the message error of the connection
192 * @return boolean : success or failure
193 */
194 public boolean connexionAvecParam(String parametre) {
195
196 String stringRequete;
197 URL hote;
198 URL urlAvecParam;
199 int typeErreur;
200 boolean lectureFluxPossible = false;
201
202 this.messageErreur = null;
203
204
205 this.deconnexion();
206
207
208 hote = this.connexionHttp.getURL();
209
210
211
212
213 stringRequete = parametre;
214
215 try {
216
217
218
219 urlAvecParam = new URL(hote, stringRequete);
220 this.url = urlAvecParam;
221 this.connexionHttp = (HttpURLConnection) (this.url)
222 .openConnection();
223
224
225
226
227 this.connexionHttp.setRequestProperty("User-Agent", "Netpisteurv2");
228 this.connexionHttp.connect();
229
230
231 typeErreur = this.connexionHttp.getResponseCode();
232
233
234 this.messageErreur = traitementErreur(typeErreur);
235
236 lectureFluxPossible = this.connexionHttp.getDoInput();
237
238 if (!lectureFluxPossible) {
239 this.messageErreur = traitementErreur(LECTURE_FLUX_IMPOSSIBLE);
240 }
241
242 } catch (java.io.IOException exWithOpenConnection) {
243 this.messageErreur = "\nConnexion a l'url : " + getURL()
244 + " impossible \n";
245 }
246
247 return this.connecte;
248 }
249
250 /**
251 * Gets the ressource of an url using the http protocol This ressource is
252 * stored in a string
253 *
254 * @return String: The ressource of the url
255 */
256 public String getSourceByString() {
257
258 InputStream fluxEntree = null;
259 InputStreamReader lecteurFlux = null;
260 BufferedReader netIn = null;
261 String reponseServeur = null;
262 String reponseServeurTmp = null;
263
264 try {
265 if (this.connecte) {
266
267 fluxEntree = this.connexionHttp.getInputStream();
268 lecteurFlux = new InputStreamReader(fluxEntree);
269 netIn = new BufferedReader(lecteurFlux);
270 do {
271 reponseServeurTmp = (netIn.readLine());
272 reponseServeur = reponseServeur + reponseServeurTmp;
273 } while (reponseServeurTmp != null);
274 } else {
275 reponseServeur = (this.messageErreur);
276
277 }
278
279 } catch (java.io.IOException exWithGetInputStream) {
280 this.messageErreur = "erreur de lecture de flux d'entree dans ConnexionHttp.getSourceByString()";
281 } finally {
282 try {
283 if (netIn != null)
284 {
285 netIn.close();
286 }
287 if (lecteurFlux != null) {
288 lecteurFlux.close();
289 }
290 if (fluxEntree != null) {
291 fluxEntree.close();
292 }
293 } catch (IOException e) {
294 log.error(e);
295 }
296 }
297
298 return reponseServeur;
299 }
300
301 /**
302 * Gets the reader of an InputStream using the http protocol This ressource
303 * is stored in an InputStream object
304 *
305 * @return InputStream : the reader of the url
306 */
307 public InputStreamReader getSourceByReader() {
308
309 InputStreamReader fluxEntree = null;
310
311 try {
312 if (this.connecte) {
313 fluxEntree = new InputStreamReader(this.connexionHttp
314 .getInputStream());
315 fluxEntree.close();
316 }
317 } catch (java.io.IOException exWithOpenConnection) {
318 this.messageErreur = "erreur de lecture de flux d'entree dans ConnexioHttp.getSourceByReader()";
319 }
320 return fluxEntree;
321 }
322
323 /**
324 * Checks the response code from the serveur
325 *
326 * @param unTypeErreur :
327 * the code error to study
328 * @return String : the error message
329 */
330 public String traitementErreur(int unTypeErreur) {
331
332 String message = null;
333
334 switch (unTypeErreur) {
335
336 case (200):
337 message = "Succs 200. OK. La requte a abouti... ";
338 this.connecte = true;
339 return message;
340
341 case (201):
342 message = "Succs 201. Cr. La requte a abouti et une nouvelle ressource rseau en rsulte... ";
343 this.connecte = true;
344 return message;
345
346 case (202):
347 message = "Succs 202. Accepte. La requte a abouti et est interprte correctement, mais son traitement n'est pas termin... ";
348 this.connecte = true;
349 return message;
350
351 case (204):
352 message = "Succs 204. Pas de contenu. La requte a abouti et le serveur n'a rien retourn en retour... ";
353 this.connecte = true;
354 return message;
355
356 case (300):
357 message = "Erreur 300. Choix multiple. La ressource vise est disponible en un ou plusieurs autres points du rseau... ";
358 this.connecte = true;
359 return message;
360
361 case (301):
362 message = "Erreur 301. Changement d'adresse dfinitive. La ressource demande est dsormais accessible via une autre URL... ";
363 this.connecte = true;
364 return message;
365
366 case (302):
367 message = "Erreur 302. Changement d'adresse temporaire. La ressource demande est actuellement et temporairement accessible via une autre URL... ";
368 this.connecte = true;
369 return message;
370
371 case (304):
372 message = "Erreur 304. Non modifi. La ressource demande n'est pas accessible car elle n'a pas t modifie... ";
373 this.connecte = true;
374 return message;
375
376 case (400):
377 message = "Erreur 400. Requte incorrecte. La requte n'a pas pu tre reconnue par le serveur pour cause d'une syntaxe incorrecte... ";
378 this.connecte = false;
379 return message;
380
381 case (401):
382 message = "Erreur 401. Non autoris. La requte demande ncessite une authentification de la part de l'utilisateur... ";
383 this.connecte = false;
384 return message;
385
386 case (403):
387 message = "Erreur 403. Interdit. Le serveur a compris la requte mais refuse de la satisfaire... ";
388 this.connecte = false;
389 return message;
390
391 case (404):
392 message = "Erreur 404. Non trouv. Le serveur n'a trouv aucune ressource correspondant l'URL vise... ";
393 this.connecte = false;
394 return message;
395
396 case (500):
397 message = "Erreur 500. Erreur serveur interne. Le serveur a t en prsence d'un vnement inattendu... ";
398 this.connecte = false;
399 return message;
400
401 case (501):
402 message = "Erreur 501. Non implment. Le serveur ne supporte pas les fonctionnalits requises pour satisfaire la requte... ";
403 this.connecte = false;
404 return message;
405
406 case (502):
407 message = "Erreur 502. Erreur de routeur. Le serveur a reu une rponse invalide de la part du serveur amont contact pour satisfaire la requte... ";
408 this.connecte = false;
409 return message;
410
411 case (503):
412
413 message = "Erreur 503. Service indisponible. Le serveur ne peut pas traiter la requte momentanment... ";
414 this.connecte = false;
415 return message;
416
417 case (6):
418
419 message = "Erreur, lecteur de flux impossible, veuillez vrifier vos paramtres de connexion... ";
420 this.connecte = false;
421 return message;
422
423 default:
424
425 message = "Erreur inconnue";
426 this.connecte = false;
427 return message;
428
429 }
430
431 }
432
433 /**
434 * Closes the connexionHttp
435 *
436 * @return boolean : state of the connection
437 */
438 public boolean deconnexion() {
439
440 this.connexionHttp.disconnect();
441 this.connecte = false;
442 return this.connecte;
443 }
444
445 }
446
447