Bonjour,
Je suis actuellement en train de créer un proxy.
Mon but est donc dans un premier temps :
* de récupérer les requêtes émises par la navigateur et de les envoyer au serveur ciblé
* puis d'attendre la réponse du serveur et de la transmettre au navigateur pour qu'il l'affiche
Mon proxy marche très bien pour du texte (hmtl, css, javascript...) mais pas pour les images.
Il faut savoir que je lis toutes les informations de la réponse envoyée par le serveur avec des String (j'ai essayé avec des byte[] pour les images mais ça n'a rien donné)
Voici ce que j'obtiens à l'affichage. Comme vous pouvez le constater, y'a comme un problème^^ :
(par exemple, le fond est censé être gris, et l'image en bas à gauche est bizarre)
Voici une partie du code. C'est la méthode qui lit les données (elle intervient donc juste après la lecture du header) :
Je me suis aperçu que je rajoute un \n après chaque lecture de ligne. J'ai donc cherché à l'enlever pour les images, afin de voir ce que ça donne :
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 private static String getContentString(BufferedReader fromWeb, String contentType) { StringBuilder contentString = new StringBuilder(); try { // Reads data while there is something to read in order to // get the content of the response while ((line = fromWeb.readLine()) != null) { contentString.append(line); contentString.append("\n"); } } catch (Exception e) { System.out.println("web response exception : " + e); } return contentString.toString(); }
(On est bien d'accord, le contentType.startsWith à chaque tour de boucle est dégueulasse, mais c'est juste pour tester)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 while ((line = fromWeb.readLine()) != null) { contentString.append(line); if (contentType.startsWith("text")) contentString.append("\n"); }
Dans ce cas, les images ne sont plus "bizarres", mais n'apparaissent carrément plus...
Sauriez-vous comment m'y prendre afin de lire les images à partir de la réponse du serveur, pour la mettre dans un nouveau string que je transmet au navigateur ?
PS : Pour ceux qui seraient tentés de le demander, oui, je veux recopier dans un nouveau string, et pas envoyer directement
Edit : En écrivant dans des fichiers les flux d'images que j'obtiens à partir du web, je m'aperçois que dans les images "du web", il y a plein de caractères en plus (des points d'interrogation) par rapport aux image originales.
Voici par exemple une comparaison entre 2 fichiers JPEG. En premier c'est la version originale, et en second la version que j'obtiens (j'ai encadré en rouge quelques unes des différences) :
Merci d'avance
Partager