Bonjour,
je vous expose succintement le problème, je dois communiquer avec un serveur via le protocole HTTP à travers un Socket. Après avoir codé plusieurs méthodes pour gérer les champs des Header HTTP, je constate que tout celà ne fonctionne pas. De fil en aiguille, j'en viens à un test assez simple:
En gros, un premier appel d'une requête GET qui provoque une réponse du serveur (401) puis exactement la même requête (elle est bien envoyée, quoique le temps mis pour l'envoyer paraisse excessivement long à la vue de la simplicité du code, chose vérifiée via Ethereal) qui elle ne provoque aucune réponse de la part du serveur. Y aurait-il une grossière erreur qui m'échapperait? Est-il possible que ce soit le serveur qui décide de m'ennuyer (ce qui me semble étrange en soit puisqu'il pose problème sur des requêtes différentes mais fonctionne par l'intermédiaire de Thunderbird par exemple)? Je vous avoue ne pas trop comprendre sur ce coup là.
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
37
38
39
40 public static void main(String[] args) { try { Socket so = new Socket("oe.hotmail.com",80); BufferedReader sc = new BufferedReader(new InputStreamReader(so.getInputStream())); PrintWriter pw = new PrintWriter(so.getOutputStream(),true); String s = "GET /svcs/hotmail/httpmail.asp HTTP/1.1\r\n" + "Host: oe.hotmail.com\r\n" + "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.9) Gecko/20061207 Firefox/1.5.0.9\r\n" + "\r\n"; pw.println(s); while (!sc.ready()) { } while (sc.ready()) { tmp += sc.readLine() + "\r\n"; } System.out.println("\nReponse 1\n\n" + tmp); tmp = ""; System.out.println("\nRequete 2\n\n" + s); System.out.println("Avant while"); pw.println(s); while (!sc.ready()) { } while (sc.ready()) { tmp += sc.readLine() + "\r\n"; } System.out.println("Après while"); System.out.println("\nReponse 2\n\n" + tmp); sc.close(); pw.close(); so.close(); } catch (UnknownHostException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } }
Edit: j'ajouterais que des flush après les println ne sont pas suffisants.
Partager