[java] proxy, pb pour afficher les images

Fermé
karine - 28 avril 2005 à 09:46
 karine - 28 avril 2005 à 10:53
Bonjour à tous,

Pour ceux qui ont suivi l'histoire, je suis toujours sur mon foutu proxy! ;-)

Il marchait très bien il y a deux jours. Après j'ai voulu empêcher l'utilisation du cache.
J'ai donc rajouté dans la requete du client un Pragma: no-cache et un Cache-control: no-cache.
Pui j'ai voulu rajouter dans la réponse du serveur un Expires avec une date déjà passée.

Le problème c'est qu'une fois que j'ai changé la réponse du serveur Web et que je la renvoie au client (byte par byte pour avoir des belles images), là, ça ne marche plus !!

Je n'y comprends rien !
Aidez-moi siouplait ;-)
Je mets le code, excusez-moi s'il est un peu long.

// Creation de la socket entre le proxy et le serveur Web
	        if (host_client != "") {
			socket = new Socket(InetAddress.getByName(host_client),port);
			System.out.println("socket créé");
		}
		else if (referer != ""){
			socket = new Socket(InetAddress.getByName(referer),port);
			System.out.println("socket créé");
		} else {
			socket = new Socket(InetAddress.getByName(url),port);
			System.out.println("socket créé");
		}
		
		
		PrintStream sortant = new PrintStream(socket.getOutputStream());
		
		// On envoie au serveur Web la requete du client
		if (host_client != "") {
			System.out.println(requete + "\r\n" + user_agent + "\r\n" + "Host: " + host_client + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			sortant.println(requete + "\r\n" + user_agent + "\r\n" + "Host: " + host_client + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			
		} else {
			System.out.println(requete + "\r\n" + user_agent + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			sortant.println(requete + "\r\n" + user_agent + "\r\n" + "Pragma: no-cache" + "\r\n" + "Cache-control: no-cache" + "\r\n");
			
		}
            	
            	// Lecture de la réponse du serveur Web
		PrintStream sout = new PrintStream(client.getOutputStream());
		InputStream entrant = socket.getInputStream();
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("monFichier.txt"));
		System.out.println("Lecture de la réponse du serveur ...");
		
		byte [] buffer = new byte[4096];
            	int lus;
		String ligne = "";
		
		  		
		// on lit byte par byte la réponse du serveur Web et on la met dans monFichier.txt
		while ((lus = entrant.read(buffer)) != -1) {	
			
			//sout.write(buffer,0,lus);
			//System.out.write(buffer,0,lus);
			bos.write(buffer, 0, lus);
			System.out.println("écriture dans monFichier.txt");
		}
		bos.flush();
   		bos.close();
			
		
		
		// il faut lire le fichier et chercher s'il y a une ligne Expires pour empecher d'utiliser le cache
		FileReader lecteur = new FileReader("monFichier.txt");
		BufferedReader entree = new BufferedReader(lecteur);
		String texte = "";
			
		// on lit monFichier.txt et on convertit la reponse du serveur en string
		while ((ligne = entree.readLine()) != null) {
			texte = texte + "\n" + ligne;
		}
		lecteur.close();
		System.out.println("String texte créé ...");
		
		FileWriter fw = new FileWriter("Resultat.txt");
             	BufferedWriter output = new BufferedWriter(fw);
	     	
		String regex = "Expires: +(.*)GMT";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(texte);
		if (m.find()){
			String resultat = texte.replaceAll(m.group(0),"Expires: Thu, 19 Nov 1981 08:52:00 GMT");		
			//System.out.println("CA PASSE 1 " + resultat);
			
			// on met le resultat dans le fichier Resultat.txt
             		output.write(resultat);
               		output.flush();
               		output.close();
					
		} else {	
			String regex2 = "(<META (NAME|HTTP-EQUIV)=\"expires\" content=\"never\">)+";
			Pattern p2 = Pattern.compile(regex2);
			Matcher m2 = p2.matcher(texte);
			if (m2.find()){
				System.out.println("CA PASSE 2");
				//System.out.println(m2.group(0));
				String resultat = texte.replaceAll(m2.group(0),"<META NAME=\"expires\" content=\"0\">");
				//System.out.println(resultat);
				output.write(resultat);
               			output.flush();
             			output.close();
			} else {
				// rien n'est spécifié pour Expires, on doit rajouter la ligne Expires: Thu, 19 Nov 1981 08:52:00 GMT
				System.out.println("CA PASSE 3");		
				
				Pattern p3 = Pattern.compile("\\s");
				String[] items = p3.split(texte,5);
				
				/*System.out.println("items[0] " + items[0]);
				System.out.println("items[1] " + items[1]);
				System.out.println("items[2] " + items[2]);
				System.out.println("items[3] " + items[3]);
				System.out.println("items[4] " + items[4]);*/
				
				output.write(items[1] + " " + items[2] + " " + items[3] + "\n");
				//System.out.println(items[1] + " " + items[2] + " " + items[3] + "\n");
				
				// j'insere cette ligne après HTTP/1.1 200 OK par exemple
				output.write("Expires: Thu, 19 Nov 1981 08:52:00 GMT\n");
				//System.out.println("Expires: Thu, 19 Nov 1981 08:52:00 GMT\n");
				
				output.write(items[4]);
				//System.out.println(items[4]);
				
				output.flush();
             			output.close();
				
			}
		}
		
		
		// Le fichier resultat est prêt, il faut l'envoyer byte par byte au client
		FileInputStream lire = new FileInputStream ("Resultat.txt");
		int octet;
		while ((octet = lire.read()) != -1) {
			sout.write(octet);
			//System.out.write(octet);
			//System.out.println("fin de l'envoi au client");
		}
		lire.close();
		
		socket.close();
		System.out.println("socket.close();");
		
A voir également:

2 réponses

Une petite précision,

quand je recharge une page, déjà elle a une drole de gueule car tout est déformé. Mais ce qui est bizarre c'est qu'elle est jamais déformée pareil à chaque fois. Comme s'il y avait un décalage dans la lecture du fichier ou un truc de ce genre.

Est-ce que quelqu'un voit une erreur dans mon code ?
J'ai rajouté des flush a chaque fois que j'ecrit dans un fichier, ça change rien.
1
Toujours pas de réponse :-(

Y a vraiment personne qui aurait ne serait-ce qu'une petite idée ?

Ca me ferait une piste pour chercher ...
0