cs_amari1
Messages postés7Date d'inscriptiondimanche 13 mars 2005StatutMembreDernière intervention16 juillet 2006
-
5 juin 2006 à 12:30
Bensashi
Messages postés3Date d'inscriptionsamedi 11 octobre 2003StatutMembreDernière intervention26 mars 2010
-
19 mars 2010 à 15:19
Salut tous le monde.
je suis entrain de programmer un proxy http en java et j'ai eu un probleme de connexion.
j'explique les démarches faitent pour implementer ce proxy:
1- mettre en ecoute un ServerSocket sur le port 1200 (pour recuperer les requettes http).
2- recuperer la requette http( eventuellement l'entete + le corp de la requette en cas d'une methode POST).
3- se connecter au serveur cible (aprés avoir recuperer le host ).
4- envoyer la requette http a ce serveurs
5- recuperer la reponse ( entete + corp) du serveur
6- envoyer cette reponse au client.
cela marche trés bien pour les methodes GET et POST ,dans la cas ou je veux consulter une boite email comme (hotmail) cette démarche ne marche pas car la requette http recuperer est du genre:
CONNECT login.live.com:443 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
Proxy-Connection: keep-alive
Host: login.live.com
je ne sais pas est ce que pour la méthode CONNECT il ya un traitement spéciale ou quoi?
j'espére que vous aller m'aidez ou me diriger vers une source qui peut m'aider car j'en ai besoin.
super_toinou
Messages postés764Date d'inscriptionmardi 25 mai 2004StatutMembreDernière intervention 8 mars 20116 5 juin 2006 à 13:28
je crois que pour les serveur mails c est le port 21 normalement sur lequel il faut tapper, j m y connait pas trop mais tu decrai peut etre voir du coté de JavaMail pour ca (c est pas le meme protocole)
++ Toinou
cs_papillon2000
Messages postés94Date d'inscriptiondimanche 30 avril 2006StatutMembreDernière intervention21 juin 2010 19 juin 2006 à 12:01
bonjours a tous, j'ai un probleme(l'addres proxy)
j'ai developper un programme avec les socket pour avoir le resultats d'une requete du moteur google,avant quand j'ai eu l'adress de proxy l'ai accedé au serveur et j'ai peu recuperer la page resultat de ma requete, mais à présent j'ai plus l'adress(car la connexion maintenant est par defaut) je ne peux pas utiliser se programme, comment puije faire pour interroger google, est ce qu'il y a une autre methode.
merci c'est très urgent.
marissalille
Messages postés4Date d'inscriptionmardi 29 avril 2008StatutMembreDernière intervention 3 février 2009 3 févr. 2009 à 15:42
bonjour,
je débute en programmation java et en ce moment j'essaye d'implémenter un proxy qui supporte les requetes http mais je rencontre certaine difficultés , pourrais tu m'envoyer ton code à fin que je puisse m'en inspirer , àa serai tres gentil merci.
voilà en gros ce que j'ai fait, 6 classes ont été défini ( start server, proxy thread, classe reponse, classe requete, proxyclient " coté client" et enfin proxy server "cot" serveur") le programme se complie mais qd je teste en local je n'arrive à recupérer toutes les infos.
merci de me donner un coup de pousse.
*********************************************************************************************
public class ProxyServer{
public Reponse Process( Requete requete ){ // méthode qui traite la requeteget host "";
Reponse r = new Reponse();
//requete = new Requete();
// Obtention et transformation de la requête du client
//readRequete();
// Connexion avec le serveur
try {
URL url = new URL(requete.getUrl());
int port = url.getPort() > 0 ? url.getPort() : 80;
socketServer = new Socket(url.getHost(),port);
}
catch (Exception e) {
// Envoi de l'erreur au client
//PrintWriter out = new PrintWriter(new OutputStreamWriter(clientOut));
String erreur = new String();
erreur += ("HTTP/1.0 200 \r\n");
erreur += ("Content-Type: text/plain \r\n\r\n");
if (socketServer != null)
socketServer.close();
}
catch (Exception ex) {}
r.setreponse(erreur);
return r ;
}
try {
// Création flux serveur
serverIn = new DataInputStream(new BufferedInputStream(socketServer.getInputStream()));
serverOut = new DataOutputStream(new BufferedOutputStream(socketServer.getOutputStream()));
// Envoi de la requete au serveur
new ClientToServerThread(serverOut, requete);
byte [] reponse = new byte[4096];
String rep = new String();
int bytesRead;
// Lecture des informations du serveur et envoi au client
while ((bytesRead = serverIn.read(reponse)) != -1) {
rep += new String(reponse, 0, bytesRead);
//clientOut.write(reponse, 0, bytesRead);
//clientOut.flush();
}
out.println(); // Envoyer une ligne vierge -> fin de la requête
out.flush();
}
catch (Exception e) {
System.out.println("Erreur ClientToServerThread : " + e);
}
}
private Socket socket;
private DataInputStream clientIn;
private DataOutputStream clientOut;
private String get, host;
private Requete requete;
private int port;
private Reponse reponse;
static ProxyServer server = new ProxyServer();
public ProxyClient(Socket socket) {
this.socket = socket;
port = socket.getPort();
try {
// création des flux pour la 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);
}
}
// lecture de la requete
public void readRequete() throws Exception {
BufferedReader bin = new BufferedReader(new InputStreamReader(clientIn));
String line;
while ((line = bin.readLine()) != null) {
System.out.println(line);
if (line.length() == 0)
break;
if (line.trim().toUpperCase().startsWith("GET")) {
String url = line.substring(3);
String rest = "";
// Obtenir http
int posit = url.toUpperCase().lastIndexOf("HTTP");
if (posit >= 0) {
rest = url.substring(posit).trim();
url = url.substring(0, posit).trim();
} else {
url = url.trim();
}
get = url;
// Création nouveau GET -> GET http://ordinateur.xyz:80/toto.htm HTTP 1.0
URL getURL = new URL(url);
requete = new Requete("GET",url);
System.out.println(socket.getInetAddress().getHostName() + " GET " + url);
server.Process(requete);
} else {
}
// HOST contient l'adresse du serveur
if (line.trim().toUpperCase().startsWith("HOST:"))
host = line.substring(5).trim();
}
}
public void run(){
reponse = server.Process(requete);
}
}
****************************************************
public class StartServer {
private ProxyThread proxy; // Notre proxy
public StartServer() {
// Démarrage des serveurs
System.out.println("Chargement des services en cours ...");
proxy = new ProxyThread(3128);
}
public void stop()
{
// Arrêt des services -> interruption des threads
if (proxy.isAlive())
proxy.interrupt();
}
public static void main(String[] args) {
StartServer server = new StartServer(); // Démarrage du serveur-proxy )
BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); // Entrée clavier utilisateur
String command; // Ligne de commande
boolean done = false;
try {
while (!done){
System.out.print("Commande : ");
command = input.readLine();
if (command.toUpperCase().equals("QUIT")) // On saisit 'QUIT' pour quitter !
done = true;
}
}
catch (Exception e) {
System.out.println("Erreur MAIN : " + e);
System.exit(1);
}
finally {
server.stop();
}
System.exit(0);
}
}
***********************************************
public class ProxyThread extends Thread{
private int port;
public ProxyThread(int port) {
this.port = port;
start(); // On exécute la thread;
}
public void run() {
try {
System.out.println("Serveur Proxy sur port : " + port + " démarré !");
ServerSocket server = new ServerSocket(port);
// On attend l'arrivé d'un client
while (!interrupted()) {
Socket client = server.accept();
System.out.println("Client : " + client.getInetAddress());
new ProxyClient(client); // On crée un nouveau client proxy
sleep(5);
}
System.out.println("Serveur Proxy sur port : " + port + " arrêté !");
}
catch (IOException e) {
}
catch (InterruptedException e) {
}
}
}
*************************************************
public class Requete implements Serializable {
private String methode;
private String url;
hannounamah
Messages postés9Date d'inscriptionmercredi 4 février 2009StatutMembreDernière intervention15 avril 2009 10 févr. 2009 à 14:16
Bonjour,
Je
dois développer un proxy en java et en utilisant le framework
HttpClient, ce proxy doit faire la capture dans un fichier xml de tout
le flux des requetes et des réponses lorsqu'on est en communication
avec une application web.
SVP est ce que vous pouvez m'aider, je
sais pas comment je vais le faire.Est ce que quelqu'un peut me proposer
des documents ou un code source qui pourrait m'aider?
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bensashi
Messages postés3Date d'inscriptionsamedi 11 octobre 2003StatutMembreDernière intervention26 mars 2010 19 mars 2010 à 15:19
Je sais deterrage de post ;) mais la réponse à la question initiale est interressante pour moi :
" je ne sais pas est ce que pour la méthode CONNECT il ya un traitement spéciale ou quoi ?
j'espére que vous aller m'aidez ou me diriger vers une source qui peut m'aider car j'en ai besoin.
Merci
"
Si le modérateur passe par la, il vaudrait mieux supprimer les messages n'ayant rien a voir ! que de me dire que " c'est du deterrage de post " ;)