Problème de Proxy HTTP

cs_nanano7 Messages postés 9 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 23 mai 2008 - 17 avril 2008 à 13:29
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010 - 17 avril 2008 à 14:43
Bonjour tous le monde

j'ai troué un petit programme de proxy http en java, mais ne retourne pas la résultat, il retourne juste la reponse de l'en-tête http, voici le programme :

--------------------------------------
import java.io.*;
import java.net.*;

class OneServeur extends Thread{
  private Socket socket, socketToWeb;
  private BufferedReader fromBrowser;
  private PrintWriter toBrowser;
  private PrintWriter toWeb;
  private BufferedReader fromWeb;

  public OneServeur(Socket s) throws IOException {
        socket = s;
        fromBrowser = new BufferedReader(
                            new InputStreamReader (
                              socket.getInputStream()));
        toBrowser = new PrintWriter( new BufferedWriter (
                                      new OutputStreamWriter (
                                      socket.getOutputStream())),true);
        start();
  }

  public void run() {
    try {
        String str, targetHost="", httpHeader="";
        while(true) {
             str = fromBrowser.readLine();
             httpHeader += str + "\n";
             if ( str.startsWith("Host: " ) ) targetHost = str.substring(6);
             if ( str.length() == 0 ) break;
        }
        //socketToWeb = new Socket(InetAddress.getByName(targetHost),80);
        socketToWeb = new Socket(
                            InetAddress.getByName(targetHost),80);
        System.out.println(socketToWeb);
        fromWeb = new BufferedReader(
                      new InputStreamReader (
                          socketToWeb.getInputStream()));
        toWeb = new PrintWriter( new BufferedWriter (
                                  new OutputStreamWriter (
                                    socketToWeb.getOutputStream())),true);
        System.out.println("-> -> -> -> -> -> ->  \n" + httpHeader);
        toWeb.println(httpHeader);

        boolean echoing = true;

        while ( true ) {
             str = fromWeb.readLine();
             if ( str == null ) break;             if ( str.length() 0 ) echoing false;
             if( echoing ) System.out.println(str);
             toBrowser.write(str);
        }
        System.out.println("\nclosing ...");
    } catch ( IOException e) {
    } finally {
        try {
                socket.close();
        } catch ( IOException e ) {}
    }
  }
}
------------------------------------------------
voici le resultat qui m'a donner :

Started ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=12345]
connection acceptee Socket[addr=/192.168.0.7,port=1523,localport=12345]
Socket[addr=www.google.fr/66.249.93.147,port=80,localport=35059]
-> -> -> -> -> -> -> 
GET / HTTP/1.1
Host: www.google.fr
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: GPC=FW=0:GHV=2:MGLS=0:MGV=0:SG=0:TE=0:TS=0:TV=0:WCYD=0:SIG=knL9H0E5R8onR5e1; PREF=ID=60b983ba303f9e1e:TB=4:LD=fr:NR=100:TM=1203686163:LM=1207734861:S=4R40Q4i3iomrmRJD; GDSESS=ID=60b983ba303f9e1e:EX=1207825110:S=H0eaQ8x-pzEdekJe; S=sorry=-td9FggEbhej8Ic1Ga3Icg; BX=38hlknh40ce55&b=3&s=lb

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Server: gws
Content-Length: 2740
Date: Thu, 17 Apr 2008 11:19:35 GMT

closing ...

si qlq voir où le problème, qu'il m'aide, et merci

1 réponse

cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
17 avril 2008 à 14:43
Salut,
il n'affiche que l'entête mais il est sensé envoyé au navigateur tout le contenu.
c'est :
if ( str.length() 0 ) echoing false;
if( echoing ) System.out.println(str);
qui détecte la fin de l'entête et n'affiche plus après.
Cela dit si tu affiche le reste quand tu te connecte à google ça risque de pas être très lisible puisque comme tu indique accepter que se soit compresser ("Accept-Encoding: gzip,deflate") google va t'envoyer du compresser ("Content-Encoding: gzip").
0