Bonjour, j'essaie de programmer un mini proxy (reçoit les requêtes du navigateur, les transmet au serveur, et renvoi la réponse au navigateur)
Mais malheureusement après de nombreux essais (sockets, httpwebrequest...) mon code ne fonctionne toujours pas complètement.
Le code semble fonctionner, mais le navigateur n'affiche rien et reste en chargement alors que le programme lui a normalement envoyé quelque chose.

Est-ce qu'un spécialiste pourrait me dire ce qui ne va pas dans mon code?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
System.Net.Sockets.Socket x = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            x.Bind(new System.Net.IPEndPoint(IPAddress.Parse("127.0.0.1"), 8800));
            x.Listen(100);
            while (true)
            {
                //ecoute le navigateur
                richTextBox1.Text += "en attente..." + Environment.NewLine;
                richTextBox1.Select(richTextBox1.Text.Length - 2, 1);
                Application.DoEvents();
              System.Net.Sockets.Socket y =  x.Accept();
              while (y.Available <= 0)
              { }
              byte[] b = new byte[y.Available];
              richTextBox1.Text += "reception du navigateur..." + Environment.NewLine;
              richTextBox1.Select(richTextBox1.Text.Length - 2, 1);
              Application.DoEvents();
              while (y.Available > 0)
              {
                  y.Receive(b);
              }
                //transmet au serveur
              richTextBox1.Text += "transmission au serveur..." + Environment.NewLine;
              richTextBox1.Select(richTextBox1.Text.Length - 2, 1);
              Application.DoEvents();
              System.Net.Sockets.Socket z = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
              string[] header = System.Text.Encoding.UTF8.GetString(b).Split(Environment.NewLine.ToCharArray());
              string host = string.Empty;
              for(int i=0;i<header.Length;i++)
               {
                    if (header[i].ToLowerInvariant().Contains("host:"))
                    {host = header[i];break;}
               }
              host = host.Substring(5).Trim();
              z.Connect(host, 80);
              z.Send(b);
                //ecoute la reponse du serveur
              //System.Net.Sockets.Socket w = z.Accept();
              while (z.Available <= 0)
              { }
              byte[] b2 = new byte[z.Available];
              richTextBox1.Text += "reception du serveur" + Environment.NewLine;
              richTextBox1.Select(richTextBox1.Text.Length - 2, 1);
              Application.DoEvents();
              while (z.Available > 0)
              {
                  z.Receive(b2);
              }
              richTextBox1.Text += "transmission au navigateur" + Environment.NewLine;
              richTextBox1.Select(richTextBox1.Text.Length - 2, 1);
              Application.DoEvents();
              y.Send(b2);
            }
PS : j'ai aussi testé cette source : http://www.c-sharpcorner.com/UploadF...web_proxy.aspx, mais ca ne marche pas tout à fait : il traite des string, et donc ne marche pas avec la compression gzip de google par exemple, il est aussi limité à l'http.
Ce que je souhaite, c'est créer un proxy fonctionnant en byte et pas en string, de façon à ne pas s'occuper du type de fichier, ou des protocoles.
En fait, il faudrait que les données du navigateur passent par le programme, avec éventuellement un filtrage, puis qu'elles soient transmises au serveur et que la réponse du serveur soit transmise au navigateur.

merci d'avance pour vos réponses