Bonjour,
jai réalisé une application en java qui stocke des donnés sous forme de chaînes sur un serveur. Coté serveur les requêtes sont gérées en PHP.
Coté java pour l'envoi des données les chaînes de caractères sont d'abord rangées dans deux listes clé-valeur
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 static List<String> keys; static List<String> values;
Puis la méthode POST est utilisée
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public static String get(String url) throws IOException { String source = ""; URL oracle = new URL(url); URLConnection yc = oracle.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { source += inputLine; } in.close(); return source; } public static String post(String adress) throws IOException { String result = ""; OutputStreamWriter writer = null; BufferedReader reader = null; try { //encodage des paramètres de la requête String data = ""; for (int i = 0; i < keys.size(); i++) { if (i != 0) { data += "&"; } // data+=keys.get(i)+"="+values.get(i); data += URLEncoder.encode(keys.get(i), "UTF-8") + "=" + URLEncoder.encode(values.get(i), "UTF-8"); } //création de la connection URL url = new URL(adress); URLConnection conn = url.openConnection(); HttpURLConnection urlCon = (HttpURLConnection) conn; urlCon.setRequestMethod("POST"); urlCon.setDoOutput(true); //envoi de la requête writer = new OutputStreamWriter(urlCon.getOutputStream()); writer.write(data); writer.flush(); //lecture de la réponse reader = new BufferedReader(new InputStreamReader(urlCon.getInputStream())); String ligne; while ((ligne = reader.readLine()) != null) { result += ligne + "\n"; } } catch (Exception e) { e.printStackTrace(); } finally { try { writer.close(); } catch (Exception e) { } try { reader.close(); } catch (Exception e) { } } return result; }
Coté serveur, on récupère les données du POST comme ceci
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 if(!$uploadOver && $uploadEnabled) {//le post doit être lu $format='val%05d'; $rank=sprintf($format,$index); if(isset ($_POST[$rank])) { echo " j'ai reçu ceci : \r\n".$_POST[$rank]; $uploadEntry= new DicEntry($_POST[$rank]) ; $index++; }else { $uploadOver=true; } }
et là, stupeur ! Si la chaîne envoyée dans values contient par exemple :
l'écho de PHP renvoi :s'apercevoir
Ensuite quand on relit le fichier où PHP a rangé les données, on retrouve cet anti-slash dans le programme java.j'ai reçu ceci : s\'apercevoir (avec ce mal venu antislash)
À titre indicatif, la relecture du fichier de données depuis java se fait comme suit:
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 URL url = new URL(urlString); URLConnection conn = url.openConnection(); serverReader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String lineServer = null; String str = null; //System.out.println("on a passé urlconn"); if (!fIn.exists()) { fIn.createNewFile(); } localReader = new BufferedReader(new InputStreamReader(new FileInputStream(dicFileName), "UTF-8"));
Merci pour toute aide pour comprendre ce phénomène.
Partager