hannounamah
Messages postés9Date d'inscriptionmercredi 4 février 2009StatutMembreDernière intervention15 avril 2009
-
17 févr. 2009 à 15:12
nadiajolie
Messages postés1Date d'inscriptionlundi 31 mars 2008StatutMembreDernière intervention30 juin 2009
-
30 juin 2009 à 16:33
salut
Je dois développer un proxy en java pour faire les taches suivantes
1- mettre en écoute un ServerSocket sur un port (pour recuperer les requettes http).
2- récupérer la requete http( eventuellement l'entete + le corp de la requete en cas d'une méthode POST).
3- se connecter au serveur cible (aprés avoir récupérer le host ).
4- envoyer la requete http a ce serveurs
5- récupérer la réponse ( entete + corp) du serveur
6- envoyer cette réponse au client.
7-faire la capture de tout les flux entre client et serveur(requetes et réponses) dans un fichier xml
Je suis arrivée à récupérer les informations de la requete et de la réponse et a les afficher dans la console mais j'ai un probleme a ce niveau: les informations s'affichent en plusieurs étapes, alors que je veux que la requete soit exécutée et la réponse soit retournée complètement au client et apres se fait l'affichage des informations
Merci d'avance pour votre aide
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 17 févr. 2009 à 15:32
Salut,
Il te faut bufferiser les informations de la requête (dans une String ou une List par exemple) avant de les utiliser
______________________________________
DarK Sidious
hannounamah
Messages postés9Date d'inscriptionmercredi 4 février 2009StatutMembreDernière intervention15 avril 2009 17 févr. 2009 à 15:48
merci pour ta réponse mais est ce que tu peux m'expliquer plus
voici ma classe
public class ProxyServerClientThread extends Thread{
private Socket socket, socketServer;
private DataInputStream clientIn;
private DataOutputStream clientOut;
private String get,host, method ,url, httpversion,parameters;
private int port;
Vector<String> headersrequest = new Vector<String>();//vector for request's headers
Vector<String> vectrequest= new Vector<String>();//vector for request's informations like method, url, http version
Vector<String> responsevector= new Vector<String>();//vector for response's informations
Vector<String> parametersrequest= new Vector<String>();//vector for request's parameters to send with the post method
public ProxyServerClientThread(Socket socket) {
this.socket = socket;
port = socket.getPort();
try {
// create the flow for the socket client
clientIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
clientOut = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
start();
}
catch (IOException e) {
System.out.println("Erreur IO Client Proxy Server : " + e);
}
}
/**
* methode qui lit la requete et en extrait les infos
*/
private void readRequest() throws Exception {
System.out.println("url before substring :"+url);//search for parameters to send with the post method
int positsearch=url.indexOf("search");
int posit = url.toUpperCase().lastIndexOf("HTTP");
httpversion=url.substring(posit).trim();
if (posit >= 0)
url = url.substring(0, posit).trim();
else
url = url.trim();
if (positsearch >= 0)
{
parameters=url.substring(positsearch+7, posit);
System.out.println("parameters :"+parameters);//search for parameters to send with the post method
String[] arrayparams=parameters.split("&");
for(int j=0;j<arrayparams.length;j++)
{parametersrequest.add(arrayparams[j]);
System.out.println("new param in req :"+parametersrequest.elementAt(j));
}
}
get = url;
}
public void run() {
try { get host "";
MethodGet methodget;
MethodPost methodpost;
// have the request
readRequest();
if(method.equalsIgnoreCase("GET"))
{
System.out.println("/****httpclient exucute the getmethod***/");
methodget=new MethodGet(get, headersrequest);
responsevector=methodget.run();// run() est une methode dans la class
//MethodGet qui execute la requete et retourne la reponse dans un vector
}
else if (method.equalsIgnoreCase("POST"))
{
System.out.println("/***httpclient exucute the postmethod****/");
methodpost=new MethodPost(get, headersrequest,parametersrequest);
methodpost.run();
}
System.out.println("/***send response to client****/");
clientOut.writeBytes(responsevector.elementAt(0));//responsevector.elementAt(0) est la reponse du serveur sous forme de string
//et elle va etre retournée au client
clientOut.flush();
Read read=new Read(headersrequest, vectrequest,responsevector);//cette classe contient la methode readInformations() qui
//fait l'affichage des infos de la requete et de la reponse
//c ce code que je veux qu'il s'execute apres que la reponse soit totalement retournée
read.readInformations();
}
catch (Exception e) {
System.out.println("Erreur Client Thread Serveur Proxy sur porttt : " + port);
}
finally {
try {
if (clientIn != null)
clientIn.close();
if (clientOut != null)
clientOut.close();
if (socket != null)
socket.close();
if (socketServer != null)
socketServer.close();
if (socket != null)
socket.close();
if (socketServer != null)
socketServer.close();
}
catch (Exception e) {
System.out.println("Erreur Client Thread Serveur Proxy sur port " + port);
}
}
hannounamah
Messages postés9Date d'inscriptionmercredi 4 février 2009StatutMembreDernière intervention15 avril 2009 17 févr. 2009 à 15:50
merci pour ta réponse mais est ce que tu peux m'expliquer plus
voici ma classe
public class ProxyServerClientThread extends Thread{
private Socket socket, socketServer;
private DataInputStream clientIn;
private DataOutputStream clientOut;
private String get,host, method ,url, httpversion,parameters;
private int port;
Vector<String> headersrequest = new Vector<String>();//vector for request's headers
Vector<String> vectrequest= new Vector<String>();//vector
for request's informations like method, url, http version
Vector<String> responsevector= new Vector<String>();//vector for response's informations
Vector<String> parametersrequest= new
Vector<String>();//vector for request's parameters to send with
the post method
public ProxyServerClientThread(Socket socket) {
this.socket = socket;
port = socket.getPort();
try {
// create the flow for the socket client
clientIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
clientOut = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
start();
}
catch (IOException e) {
System.out.println("Erreur IO Client Proxy Server : " + e);
}
}
/**
* methode qui lit la requete et en extrait les infos
*/
private void readRequest() throws Exception {
System.out.println("url before substring :"+url);//search for parameters to send with the post method
int positsearch=url.indexOf("search");
int posit = url.toUpperCase().lastIndexOf("HTTP");
httpversion=url.substring(posit).trim();
if (posit >= 0)
url = url.substring(0, posit).trim();
else
url = url.trim();
if (positsearch >= 0)
{
parameters=url.substring(positsearch+7, posit);
System.out.println("parameters :"+parameters);//search for parameters to send with the post method
String[] arrayparams=parameters.split("&");
for(int j=0;j<arrayparams.length;j++)
{parametersrequest.add(arrayparams[j]);
System.out.println("new param in req :"+parametersrequest.elementAt(j));
}
}
get = url;
}
public void run() {
try { get host "";
MethodGet methodget;
MethodPost methodpost;
// have the request
readRequest();
if(method.equalsIgnoreCase("GET"))
{
System.out.println("/****httpclient exucute the getmethod***/");
methodget=new MethodGet(get, headersrequest);
responsevector=methodget.run();// run() est une methode dans la class
//MethodGet qui execute la requete et retourne la reponse dans un vector
}
else if (method.equalsIgnoreCase("POST"))
{
System.out.println("/***httpclient exucute the postmethod****/");
methodpost=new MethodPost(get, headersrequest,parametersrequest);
methodpost.run();
}
System.out.println("/***send response to client****/");
clientOut.writeBytes(responsevector.elementAt(0));//responsevector.elementAt(0)
est la reponse du serveur sous forme de string
//et elle va etre retournée au client
clientOut.flush();
Read read=new Read(headersrequest,
vectrequest,responsevector);//cette classe contient la methode
readInformations() qui
//fait l'affichage des infos de la requete et de la reponse
//c ce code que je veux qu'il
s'execute apres que la reponse soit totalement retournée
read.readInformations();
}
catch (Exception e) {
System.out.println("Erreur Client Thread Serveur Proxy sur porttt : " + port);
}
finally {
try {
if (clientIn != null)
clientIn.close();
if (clientOut != null)
clientOut.close();
if (socket != null)
socket.close();
if (socketServer != null)
socketServer.close();
if (socket != null)
socket.close();
if (socketServer != null)
socketServer.close();
}
catch (Exception e) {
System.out.println("Erreur Client Thread Serveur Proxy sur port " + port);
}
}
nadiajolie
Messages postés1Date d'inscriptionlundi 31 mars 2008StatutMembreDernière intervention30 juin 2009 30 juin 2009 à 16:33
Bonjour
j'aimerais utliser ton appli, par contre je ne comprend pas comment t'as implémenté ton programme, par ex la classe MethodGet je ne vois pas sa définition et Read aussi