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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
String requeteClient = "";
String serveurWeb = "";
String urlServeurWeb = "";
String requeteComplete = "";
String methode = "";
Byte ligne = null;
LinkedList <Byte> pageWeb = new LinkedList <Byte>();
System.out.println("Debut de connection");
try {
if (ouvertureCommunication(1)) {
//Récupération de la requête et de l'adresse de l'hôte
do {
requeteClient=recoiClient.readLine();
//Si il n'y a pas/plus de ligne dans la requète on arrete la boucle
if (requeteClient == null || requeteClient.length() == 0) {
break;
}
//On récupère l'url du site ainsi que la méthode utilisée
if (requeteClient.startsWith("GET " )) {
urlServeurWeb = requeteClient.substring(4).split(" ")[0];
methode = "GET";
}
if (requeteClient.startsWith("POST " )) {
urlServeurWeb = requeteClient.substring(5).split(" ")[0];
methode = "POST";
}
//On continu tant que l'on a pas récupérer l'intégralité du header
//de la requète
} while (!requeteClient.equals("\r"));
//Si il n'y a pas de requete ou si l'url n'est pas spéciifiée
//on envoi une page d'erreur
if (urlServeurWeb == "" || urlServeurWeb == null){
if (envoiClient != null) {
envoiClient.writeBytes("<h1>Requête invalide</h1>");
envoiClient.flush();
this.stop();
}
}
else {
//Création des éléments de communication avec le serveur web
//création de la connection au serveur web
URLConnection connection = null;
try {
URL url = new URL(urlServeurWeb);
connection = url.openConnection();
//Si l'on est derriere un autre proxy (peut servir parfois)
/*InetSocketAddress test2 = new InetSocketAddress("url proxy",port proxy);
java.net.Proxy.Type prot = java.net.Proxy.Type.HTTP;
connection = url.openConnection(new java.net.Proxy(prot,test2));*/
}
catch (IOException e) {
System.out.println("Problème de connexion au serveur web : " + e);
this.stop();
}
if (connection instanceof HttpURLConnection) {
try {
proxyServeurWeb = (HttpURLConnection)connection;
proxyServeurWeb.setRequestMethod(methode);
proxyServeurWeb.setDoOutput(true);
proxyServeurWeb.connect();
recoiServeurWeb = new DataInputStream(proxyServeurWeb.getInputStream());
if (proxyServeurWeb.getResponseCode() == 200) {
try {
do {
pageWeb.add(recoiServeurWeb.readByte());
} while(true);
}
catch (EOFException e) {}
int nbChar = pageWeb.size();
byte tabLigne[] = new byte[nbChar];
byte tabLignetmp[] = new byte[nbChar];
for (int i = 0; i < nbChar; i++) {
tabLigne[i] = pageWeb.get(i);
}
envoiClient.write(tabLigne);
envoiClient.flush();
}
}
catch (ProtocolException e) {
System.out.println("Problème protocole : " + e);
}
catch (IllegalStateException e) {
System.out.println("Problème d'état : " + e);
}
catch (IOException e) {
System.out.println("Problème de connexion au site : " + e);
}
}
}
}
}
catch(Exception e) {
e.printStackTrace();
}
finally {
fermetureCommunication();
System.out.println("Fin de connection");
}
}
private boolean ouvertureCommunication(int test) {
try {
if (test == 1) {
recoiClient = new BufferedReader(new InputStreamReader(clientProxy.getInputStream()));
envoiClient = new DataOutputStream(clientProxy.getOutputStream());
return true;
}
else if (test == 2) {
envoiServeurWeb = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proxyServeurWeb.getOutputStream())));
return true;
}
else {
return false;
}
}
catch (IOException e) {
System.out.println("Problème d'ouverture de connexion : " + e);
return false;
}
}
private void fermetureCommunication() {
try {
if (recoiClient != null)
recoiClient.close();
if (recoiServeurWeb != null)
recoiServeurWeb.close();
if (envoiClient != null)
envoiClient.close();
if (envoiServeurWeb != null)
envoiServeurWeb.close();
}
catch (IOException e) {
System.out.println("Problème de fermeture de connexion : " + e);
}
} |