Problème de Proxy HTTP

Signaler
Messages postés
9
Date d'inscription
dimanche 17 décembre 2006
Statut
Membre
Dernière intervention
23 mai 2008
-
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010
-
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

Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

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").