[C#] récuperer un flux http

récuperer un flux http [C#] - C#/.NET managed - Programmation

Marsh Posté le 17-07-2008 à 18:00:46    

Je cherche à récuperer un flux http en C#, mais je me heurte à une erreur que je ne comprends pas.
 
J'ai une adresse interne imaginons http://toto:9443/Web/PingServlet qui me renvoie tout simplement 1.
 
Quand j'essaye de faire un simpe bouton qui envoie le resultat dans un richtext, j'ai une exception dont le message est : Le serveur à commis une violation de protocole. Section=ResponseStatusLine
 
Quand je teste avec http://www.google.com j'ai bien toutes les données. Est-ce que je dois me documenter sur le servlet qui me répond ?
 
 
Le code est :
 

Code :
  1. namespace TestHTTPrequest
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         HttpWebResponse HttpWResponse = null;
  6.         StreamReader sr = null;
  7.         public Form1()
  8.         {
  9.             InitializeComponent();
  10.         }
  11.         private void button1_Click(object sender, EventArgs e)
  12.         {
  13.             try
  14.             {
  15.                 HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(textBox1.Text);
  16.                 HttpWResponse = (HttpWebResponse)HttpWRequest.GetResponse();
  17.                 sr = new StreamReader(HttpWResponse.GetResponseStream());
  18.                 richTextBox1.Text = sr.ReadToEnd();
  19.             }
  20.             catch (Exception ee)
  21.             {
  22.                 MessageBox.Show("ERREUR!" + ee.Message);
  23.             }
  24.             finally
  25.             {
  26.                 if (HttpWResponse != null)
  27.                     HttpWResponse.Close();
  28.                 if (sr != null)
  29.                     sr.Close();
  30.             }
  31.            
  32.         }
  33.     }
  34. }


 
Merci

Reply

Marsh Posté le 17-07-2008 à 18:00:46   

Reply

Marsh Posté le 17-07-2008 à 19:53:26    

ben s'il envoie "1" sans les header HTTP, logique non ?
 
ou si y'a bien les header http, mais la section data ne contient que 1 ?
 
tu peux aussi essayer avec la classe webclient, ça te retourne directement du texte de mémoire, et non un stream.

Message cité 1 fois
Message édité par MagicBuzz le 17-07-2008 à 19:54:35
Reply

Marsh Posté le 18-07-2008 à 09:38:32    

MagicBuzz a écrit :

ben s'il envoie "1" sans les header HTTP, logique non ?
 
ou si y'a bien les header http, mais la section data ne contient que 1 ?
 
tu peux aussi essayer avec la classe webclient, ça te retourne directement du texte de mémoire, et non un stream.


 
Merci MagicBuzz pour ton aide. Je tente de suivre ton conseil, mais j'ai exactement la même erreur avec ce type de code :
 

Code :
  1. public partial class Form1 : Form
  2.     {
  3.         WebClient wc = new WebClient();
  4.         public Form1()
  5.         {
  6.             InitializeComponent();
  7.         }
  8.         private void button1_Click(object sender, EventArgs e)
  9.         {
  10.             try
  11.             {
  12.                 Byte[] b = wc.DownloadData(textBox1.Text);
  13.                 richTextBox1.Text = b.ToString();
  14.             }
  15.             catch (Exception ee)
  16.             {
  17.                 MessageBox.Show("ERREUR!" + ee.Message);
  18.             }
  19.         }
  20.     }

Reply

Marsh Posté le 18-07-2008 à 11:03:29    

Donc j'ai bien l'impression que ton serveur envoie une information formattée de façon incorrecte...
 
Est-ce que tu peux faire ce test ?
 
En ligne de commande, tapes :
 


telnet toto 9443
GET http://toto:9443/Web/PingServlet HTTP/1.0
 
 


(ps : sous Windows, il n'affiche pas la seconde ligne pendant que tu la tapes, donc fait gaffe ;))
 
=> Et poster ici ce que tu as comme réponse.
 
Par exemple, avec http://www.google.com :
 


 
 
 
HTTP/1.0 302 Moved Temporarily
Location: http://www.google.fr/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=ec65c6bd4483d940:TM=1216371612:LM=1216371612:S=sDf_UcUTmpBRv
qXY; expires=Sun, 18-Jul-2010 09:00:12 GMT; path=/; domain=.google.com
Date: Fri, 18 Jul 2008 09:00:12 GMT
Server: gws
Content-Length: 218
X-Cache: MISS from fw.concerto-sas.local
Proxy-Connection: close
 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
                                                                              <T
ITLE>302 Moved</TITLE></HEAD><BODY>
                                   <H1>302 Moved</H1>
                                                     The document has moved
                                                                           <A HR
EF="http://www.google.fr/">here</A>.
</BODY></HTML>
 
 
Perte de la connexion à l'hôte.


 
=> Moi j'ai bien l'impression que le "1" il l'envoie à la place du "HTTP/1.0"... Et là je comprends parfaitement pourquoi il y a une violation de protocole. Si c'est le cas, t'as plus qu'à passer par des Sockets pour travailler comme via cette commande telnet.

Message cité 1 fois
Message édité par MagicBuzz le 18-07-2008 à 11:05:10
Reply

Marsh Posté le 18-07-2008 à 11:57:05    

MagicBuzz a écrit :


=> Moi j'ai bien l'impression que le "1" il l'envoie à la place du "HTTP/1.0"... Et là je comprends parfaitement pourquoi il y a une violation de protocole. Si c'est le cas, t'as plus qu'à passer par des Sockets pour travailler comme via cette commande telnet.


 
Exact MagicBuzz,
 
Je suis egallement persuadé qu'il renvoie simplement "1". Il faut donc travailler via des sockets ? As-tu une piste à me donner un lien ? Car je n'ai aucune idée.
 
En gros il s'agit d'une petite appli qui permet de voir si un service web est actif. Donc on appelle un servlet qui nous renvoie 1.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed